/go_beginners_course

Курс по Go для начинающих

Primary LanguageGo

gopher

Курс по Go, организованный и проведенный сообществом GDG Kalinigrad, компаниями Innoseti и Avito 13.05.2020 - 24.06.2020

Go для начинающих

Этот курс основан на книге и её русской версии, а также других источниках.

Для кого курс

Курс предназначен для тех, кто хочет познакомиться с языком Go. Уровень неважен. Подходит как для тех, кто имеет большой опыт разработки на других языках программирования и хочет познакомиться с новым, так и для тех, кто только начинает погружаться в мир программирования.

План курса

План

Занятие 1

Содержание

  • История языка
  • Подготовка к работе
  • Ваша первая программа

Материалы

Слайды урока
Практика
Ссылка на домашнее задание
Видео урока

Занятие 2

Содержание

  • Типы данных, конвертация типов
  • Переменные, константы, арифметические операции
  • Области видимости

Материалы

Слайды урока
Практика
Ссылка на домашнее задание часть 1
Ссылка на домашнее задание часть 2
Видео урока

Занятие 3

Содержание

  • Управляющие конструкции (условия, конструкции, циклы)
  • Срезы, массивы, мапы

Материалы

Слайды урока
Практика
Ссылка на домашнее задание
Видео урока

Занятие 4

Содержание

  • Функции
  • Указатели

Материалы

Слайды урока
Практика
Ссылка на домашнее задание
Видео урока

Занятие 5

Содержание

  • Структуры и интерфейсы
  • Конкурирование или многопоточность?

Материалы

Слайды урока
Практика
Ссылка на домашнее задание
Видео урока
Никита Кондратьев - Tips & Trics

Tips & Tricks. Структуры и интерфейсы

Никита Кондратьев (Разработчик, юнит SafeDeal, Авито)

  1. Принимайте интерфейсы, возвращайте структуры.
  2. В Go отсутствует наследование как в ООП. Используйте интерфейсы.
  3. Не злоупотребляйте interface{}.
  4. Не перегружайте интерфейсы.
  5. Если структура нужна только для того, чтобы реализовать интерфейс, не экспортируйте её.
  6. Помните, что nill удовлетворяет любому интерфейсу.
  7. Если нужно изменить данные структуры в методе, определите метод на указателе на структуру.
  8. При объявлении нового типа на основе существующего вы не наследуете методы. Для этого нужно использовать "встраивание" типов.
  9. Держите в голове, что encoding/json может работать только с "публичными" полями структур.
  10. Учитывайте, что тип и указатель на тип имеют разные наборы методов.

Занятие 6

Содержание

  • Пакеты и повторное использование кода
  • Документирование кода
  • Обработка ошибок

Материалы

Слайды урока
Практика
Ссылка на домашнее задание
Видео урока
Вячеслав Бобик - Tips & Tricks

Tips & Tricks. Пакеты и повторное использование кода

Вячеслав Бобик (Разработчик, юнит Messenger, Авито)
Именование пакетов

  • В чем смысл пакета
  • Примеры из стандартной библиотеки
  • Примеры реального проекта(как надо, как НЕ надо)
  • Несколько best practices по именованию пакета Организация пакетов
  • Подходы в организации пакетов
    • Монолит
    • Рельсы/Джанга/
    • Разбиение по модулям
    • Группировка, основанная на доменных типах и сервисах.
    • Где черпать вдохновение: пример на репозиторий go-package-layout
    • Лучше маленькая копипаста, чем зависимость.

Занятие 7

Содержание

  • Тестирование
  • Стандартная библиотека
  • Следующие шаги

Материалы

Слайды урока
Практика
Ссылка на домашнее задание
Видео урока
Сергей Иваненко - Tips & Tricks

Tips & Tricks. Unit тестирование в Go

Сергей Иваненко (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

Преподаватели

Дима Клестов (Инносети)

Tips & Tricks

Вячеслав Бобик (Avito)
Никита Кондратьев (Avito)
Сергей Иваненко (Avito)

Организация

Мария Круглова (GDG Kaliningrad)
Никита Русин (GDG Kaliningrad)