Курс по Go, организованный и проведенный сообществом GDG Kalinigrad, компаниями Innoseti и Avito 13.05.2020 - 24.06.2020
Этот курс основан на книге и её русской версии, а также других источниках.
Курс предназначен для тех, кто хочет познакомиться с языком Go. Уровень неважен. Подходит как для тех, кто имеет большой опыт разработки на других языках программирования и хочет познакомиться с новым, так и для тех, кто только начинает погружаться в мир программирования.
- История языка
- Подготовка к работе
- Ваша первая программа
Слайды урока
Практика
Ссылка на домашнее задание
Видео урока
- Типы данных, конвертация типов
- Переменные, константы, арифметические операции
- Области видимости
Слайды урока
Практика
Ссылка на домашнее задание часть 1
Ссылка на домашнее задание часть 2
Видео урока
- Управляющие конструкции (условия, конструкции, циклы)
- Срезы, массивы, мапы
Слайды урока
Практика
Ссылка на домашнее задание
Видео урока
- Функции
- Указатели
Слайды урока
Практика
Ссылка на домашнее задание
Видео урока
- Структуры и интерфейсы
- Конкурирование или многопоточность?
Слайды урока
Практика
Ссылка на домашнее задание
Видео урока
Никита Кондратьев - Tips & Trics
Никита Кондратьев (Разработчик, юнит SafeDeal, Авито)
- Принимайте интерфейсы, возвращайте структуры.
- В Go отсутствует наследование как в ООП. Используйте интерфейсы.
- Не злоупотребляйте interface{}.
- Не перегружайте интерфейсы.
- Если структура нужна только для того, чтобы реализовать интерфейс, не экспортируйте её.
- Помните, что nill удовлетворяет любому интерфейсу.
- Если нужно изменить данные структуры в методе, определите метод на указателе на структуру.
- При объявлении нового типа на основе существующего вы не наследуете методы. Для этого нужно использовать "встраивание" типов.
- Держите в голове, что encoding/json может работать только с "публичными" полями структур.
- Учитывайте, что тип и указатель на тип имеют разные наборы методов.
- Пакеты и повторное использование кода
- Документирование кода
- Обработка ошибок
Слайды урока
Практика
Ссылка на домашнее задание
Видео урока
Вячеслав Бобик - Tips & Tricks
Вячеслав Бобик (Разработчик, юнит Messenger, Авито)
Именование пакетов
- В чем смысл пакета
- Примеры из стандартной библиотеки
- Примеры реального проекта(как надо, как НЕ надо)
- Несколько best practices по именованию пакета Организация пакетов
- Подходы в организации пакетов
- Монолит
- Рельсы/Джанга/
- Разбиение по модулям
- Группировка, основанная на доменных типах и сервисах.
- Где черпать вдохновение: пример на репозиторий go-package-layout
- Лучше маленькая копипаста, чем зависимость.
- Тестирование
- Стандартная библиотека
- Следующие шаги
Слайды урока
Практика
Ссылка на домашнее задание
Видео урока
Сергей Иваненко - Tips & Tricks
Сергей Иваненко (Support Systems developer, Avito)
Буду рассмотрены примеры unit-тестирования простых функций, файлов, http-клиентов, sql-запросов. Будет проиллиюстированно как сторонние пакеты (facker, mockery, spf13/afero) помогают в этом вопросе, поговорим о внедрении зависимостей и как это помогает при тестировании.
Встроенные инструменты code coverace, benchmark.
План:
- unit testing: табличные тесты, просто тесты, приватные функции. Примеры File, websocket, httpClient, etc
- вспомогательные инструменты (facker, mockery)
- TDD
- Слоеная архитектура (циклическая зависимость) +/- различных подходов размещения unit_tests
- code coverace
- code race condition, parrallel
- benchmark
Вячеслав Бобик (Avito)
Никита Кондратьев (Avito)
Сергей Иваненко (Avito)
Мария Круглова (GDG Kaliningrad)
Никита Русин (GDG Kaliningrad)