Язык Go
Ещё больше конструкций языка
Алексей Тарасов
Профессионально пишу нерабочий код
@tarasovion
Что уже знаем?
(hopefully)
tl;dr по предыдущему занятию
1.
Go — современный язык,
который фокусируется на
производительности,
асинхронности и простоте
разработки
3
tl;dr по предыдущему занятию
1. 2.
Go — современный язык, Memory safety, наличие
который фокусируется на Garbage Collector-а
производительности,
асинхронности и простоте
разработки
4
tl;dr по предыдущему занятию
1. 2. 3.
Go — современный язык, Memory safety, наличие Явная обработка ошибок.
который фокусируется на Garbage Collector-а Концепция “error as a value”
производительности,
асинхронности и простоте
разработки
5
tl;dr по предыдущему занятию
1. 2. 3.
Go — современный язык, Memory safety, наличие Явная обработка ошибок.
который фокусируется на Garbage Collector-а Концепция “error as a value”
производительности,
асинхронности и простоте
разработки
4.
Объявление переменных.
Инициализация нулевым
значением тех переменных,
которым явно не присвоено
значение. “:=“ vs “=“
6
tl;dr по предыдущему занятию
1. 2. 3.
Go — современный язык, Memory safety, наличие Явная обработка ошибок.
который фокусируется на Garbage Collector-а Концепция “error as a value”
производительности,
асинхронности и простоте
разработки
4. 5.
Объявление переменных. Базовые конструкции языка: if,
Инициализация нулевым for, функции
значением тех переменных,
которым явно не присвоено
значение. “:=“ vs “=“
7
tl;dr по предыдущему занятию
1. 2. 3.
Go — современный язык, Memory safety, наличие Явная обработка ошибок.
который фокусируется на Garbage Collector-а Концепция “error as a value”
производительности,
асинхронности и простоте
разработки
4. 5. 6.
Объявление переменных. Базовые конструкции языка: if, Настройка рабочего
Инициализация нулевым for, функции окружения: установка go,
значением тех переменных, настройка vscode
которым явно не присвоено
значение. “:=“ vs “=“
8
Что узнаем сегодня?
(hopefully)
План на сегодняшнее занятие
1.
Обзор на систему пакетов. Инициализация
проекта. Установка и управление зависимостями
10
План на сегодняшнее занятие
1. 2.
Обзор на систему пакетов. Инициализация Структуры и интерфейсы. Примеры паттернов,
проекта. Установка и управление зависимостями использующих интерфейсы
11
План на сегодняшнее занятие
1. 2.
Обзор на систему пакетов. Инициализация Структуры и интерфейсы. Примеры паттернов,
проекта. Установка и управление зависимостями использующих интерфейсы
3.
Некоторые пакеты и основные концепции из stdlib.
Краткий обзор на bytes, strings, errors, io, net, os
12
План на сегодняшнее занятие
1. 2.
Обзор на систему пакетов. Инициализация Структуры и интерфейсы. Примеры паттернов,
проекта. Установка и управление зависимостями использующих интерфейсы
3. 4.
Некоторые пакеты и основные концепции из stdlib. Новейшая фича из Go 1.23 — итераторы. Pull vs Push model.
Краткий обзор на bytes, strings, errors, io, net, os Использование итераторов в for-range выражениях
13
Система пакетов
Импорт системных модулей
15
Пакет = директория
[Link]
16
Инициализация проекта
17
Поддерживаемые VCS для
пользовательских пакетов
▪ Bazaar(.bzr)
▪ Fossil (.fossil)
▪ Git (.git)
▪ Mercurial (.hg)
▪ Subversion (.svn)
18
Установка зависимостей
19
Использование зависимостей
20
Использование зависимостей
21
init() и “import with blank identifier”
22
Публичные/приватные элементы
пакетов
В Go, публичные идентификаторы пакетов должны
начинаться с заглавной буквы, а приватные — со
строчной
23
Публичные/приватные элементы
пакетов
24
Структуры и
интерфейсы
Структуры
26
Методы и pointer/value receiver
27
Методы и pointer/value receiver
28
Методы и pointer/value receiver
29
Интерфейсы
● Интерфейс, глобально — набор требований и правил, которым сущность
удовлетворяет
● В терминах Go, интерфейс — множество методов, которые имеет тип
30
Интерфейсы: пример
31
Интерфейсы: пример
32
Интерфейсы: пример
33
stdlib
stdlib
Время для секции live coding-а!
35
Модули, которые мы разберём
bytes strings errors
Хелперы для работы с байтами Хелперы для работы со Утилиты для создания новых
([]byte) строками ошибок. Работа с типами
ошибок и error wrapping-ом
io net os
Пакет, содержащий Обёртки над Инструменты для работы с
абстракции над операциями низкоуровневыми файловой системой,
ввода/вывода и методы для примитивами для работы с окружением, процессами и
работы с ними. Интерфейсы сетью. [Link], [Link] прочими абстракциями
[Link], [Link], операционной системы
[Link], [Link]
36
Итераторы
Что не так с этим кодом?
38
Что не так с этим кодом?
Он проходит по массиву несколько раз
39
Дисклеймер
Это не всегда плохо!
40
Что такое итератор?
41
Что такое итератор?
42
Как пользоваться?
43
Что разобрали?
1. 2.
Обзор на систему пакетов. Инициализация Структуры и интерфейсы. Примеры паттернов,
проекта. Установка и управление зависимостями использующих интерфейсы. Сравнение ООП в стандартном
понимании с имеющимися в Go инструментами
3. 4.
Некоторые пакеты и основные концепции из stdlib. Новейшая фича из Go 1.23 — итераторы. Pull vs Push model.
Краткий обзор на bytes, strings, errors, io, net, os Использование итераторов в for-range выражениях
44