GO-I-001 Golang разработчик
Описание курса
Курс «Golang разработчик» представляет собой комплексную программу обучения, которая призвана помочь вам освоить язык программирования Golang от основ до продвинутого уровня. В ходе курса вы узнаете о преимуществах и областях применения Golang. Вы изучите основные концепции, такие как переменные, типы данных, операции и управляющие конструкции. Вам будет представлено ООП в Golang, включая структуры, методы и интерфейсы. Вы также овладеете работой с массивами, слайсами, мапами и строками.
Модуль 1
- Плюсы и минусы
- Сферы применения
- Кто использует
Модуль 2
- Типизация в Go
- Объявление переменной
- Операция присваивания
- Арифметические операции
- Указатели
- Расположения переменных в памяти
- Понятие "zero value"
- Приведение типов
- Дженерики
Модуль 3
- Конструкции if ... {} else {}, switch
- Условия и логические операции
- Цикл for
- Метки
Модуль 4
- Виды функций.
- Сигнатура функции
- Передача аргументов в функцию по ссылке и по значению
- Области видимости, {}
- Ошибки, связанные с областью видимости
- Замыкания
- Затенени<span style="font-family: var(--ui-font-family-primary, var(--ui-font-family-helvetica));">я</span>
Модуль 5
- Определение структур
- Инкапсуляция полей структуры
- Композиция
- Выравнивание
- Методы
Модуль 6
- Утиная типизация
- Композиция интерфейсов
- Утверждение типов
- Конструкция type switch
- Определение и реализация интерфейсов
- Внутреннее устройство интерфейса
- Влияние использования интерфейсов на производительность программы
- Значение типа интерфейс и ошибки, связанные с nil
- Правила присваивания значений переменным типа интерфейс
- Опасное и безопасное приведение типов (type cast)
Модуль 7
- Массивы и слайсы, мапы
- Длина и ёмкость
- Внутренняя структура слайсов и мап
- Различные способы итерации
- Частые ошибки и затруднения
Модуль 8
- Строки, руны и массивы байт
- Стандартные функции для работы со строками и Unicode
- Работа со строками через strings builder
Модуль 9
- Интерфейс error
- Конструкция defer
- Функции panic и recover.
- Кастомные ошибки
- Обертывание ошибок
- Сопоставление ошибок
Модуль 10
- Виды и назначение тестов, пирамида тестирования
- Понятие табличных тестов
- Пакет gomock для тестирования
- Golden files
- Fuzzing
Модуль 11
- Горутины и каналы
- Сравнение буферизированных и небуферизованных каналов
- Использование каналов для передачи данных и синхронизации
- Получение данных из канала: select, range
Модуль 12
- Пул объектов sync.Pool
- Мьютексы sync.Mutex/RWMutex
- Словарь sync.Map
- Условные переменные sync.Cond
- Группа ожидания sync.WaitGroup, errgroup.WithContext
- Атомарные операции - пакет atomic
- Гарантировано одноразовое выполнение sync.Once
Модуль 13
- Понятие сериализации/десериализации
- Протоколы JSON, XML, protobuf, gob
- Структурные тэги
Модуль 14
- Архитектура Интернета
- Клиент-серверное взаимодействие
- Пакет net/http, работа с HTTP
- Пакет net, работа с низкоуровневыми протоколами
- CRUD, REST
- OpenAPI, Swagger
- Oauth, basic, jwt
Модуль 15
- Различные варианты конфигурации программы
- Использование простых форматов конфигурации: .ini, .yaml, .json и т.п.
- Чтение конфигурации из окружения
- Библиотека для работы с конфигурацией: viper
Модуль 16
- Стандартная библиотека для логирования
- Использование интерфейсов для логирования
- Расширенное логирование на примере zerolog
Модуль 17
- Реляционные /нереляционные СУБД и области их применения
- Основные понятия реляционных БД
- Подключение к СУБД и настройка пула соединений
- Выполнение SQL-запросов и получение результатов
- Стандартные интерфейсы sql.DB, sql.Rows и sql.Tx
- Использование транзакций
- SQL-инъекции
- Работа с базами данных через пакет gorm
- Работа с базами данных через пакет sqlx
Модуль 18
- Сравнение монолитной и микросервисной архитектур
- Плюсы и минусы микросервисов
- Понятие 12-факторного приложения
- Пример микросервисов на Golang (сервис регистрации пользователей и сервис рассылки уведомлений)
Модуль 19
- gRPC и protobuf
- Создание gRPC клиента и сервера, лучшие практики gRPC
- Интерсепторы, надежность (ретраи, задержки)
- TLS при работе с gRPC
Модуль 20
- Событийно-ориентированные архитектуры
- Apache Kafka
- NATS
- RabbitMQ
- Примеры работы с RabbitMQ из Go
- Возможные проблемы с очередями: перегрузка, падение обработчиков, сбойные сообщения и пр.
Модуль 21
- RequestId
- OpenTelemetry
- Jaeger
Модуль 22
- Работа с многими каналами: fan in, fan out
- Pipelines
- Cancellation
- Graceful shutdown
Модуль 23
- Особенности памяти программы на Go
- Выделение и освобождение памяти на стеке и куче
- Escape analysis
- Механизм сборки мусора в Go.
Модуль 24
- Обработка аргументов командной строки: flags, pflag
- Работа с сигналами ОС
- Запуск внешних программ
- Стандартные интерфейсы io.Reader, io.Writer и io.Closer
- Последовательные и произвольные доступы и интерфейс io.Seeker
- Буферизация ввода/вывода и оптимизация копирования
- Работа с каталогами
- Работа с файлами
- Работа с потоками ввода/вывода
- Regex
Модуль 25
- Использование пакета reflect
- Плюсы и минусы рефлексии
- Reflect.Type и reflect.Value
- Примеры использования рефлексии
- Пакет unsafe и тип unsafe.Pointer
Модуль 26
- Понятие кодогенерации инструмент `go generate`
- Полезные библиотеки, использующие кодогенерацию: impl, stringer, jsonenums, easyjson и пр.
- Работа с AST, практическая кодогенерация
Модуль 27
- Бенчмарки
- Профилирование
Модуль 28
- Cache miss, cache hit
- Прогрев кэша
- LRU, LFU кэш
- Инвалидация кэша
- Ленивый кэш
- Вытеснение данных
Модуль 29
- Основные структуры планировщика: P, M, G
- Механизм переключения горутин
- Обработка системных и сетевых вызовов планировщиком