
GO-I-001 Golang-разработчик
Начало: По мере набора группы
Длительность: 1 неделя
СертификатОнлайн
Описание курса
Освойте Golang от основ до продвинутого уровня и создавайте современные приложения.
В ходе курса вы узнаете о преимуществах и областях применения Golang.
Вы изучите основные концепции:
- Переменные;
- Типы данных;
- Операции;
- Управляющие конструкции.
Основные темы курса:
- Плюсы и минусы;
- Сферы применения;
- Кто использует;
- Типизация в Go;
- Объявление переменной;
- Операция присваивания;
- Указатели;
- Расположение переменных в памяти;
- Понятие "zero value";
- Приведение типов;
- Дженерики;
- Конструкции if ... {} else {}, switch;
- Условия и логические операции;
- Цикл for;
- Метки;
- Виды функций;
- Сигнатура функции;
- Передача аргументов в функцию по ссылке и по значению;
- Области видимости, {};
- Ошибки, связанные с областью видимости;
- Замыкания;
- Затенения;
- Определение структур;
- Инкапсуляция полей структуры;
- Композиция;
- Выравнивание;
- Методы;
- Утиная типизация;
- Композиция интерфейсов;
- Утверждение типов;
- Конструкция type switch;
- Определение и реализация интерфейсов;
- Внутреннее устройство интерфейса;
- Влияние использования интерфейсов на производительность программы;
- Значение типа интерфейс и ошибки, связанные с nil;
- Правила присваивания значений переменным типа интерфейс;
- Опасное и безопасное приведение типов (type cast);
- Массивы и слайсы, мапы;
- Длина и ёмкость;
- Внутренняя структура слайсов и мап;
- Различные способы итерации;
- Частые ошибки и затруднения;
- Строки, руны и массивы байт;
- Стандартные функции для работы со строками и Unicode;
- Работа со строками через strings.Builder;
- Интерфейс error;
- Конструкция defer;
- Функции panic и recover;
- Кастомные ошибки;
- Обертывание ошибок;
- Сопоставление ошибок;
- Виды и назначение тестов, пирамида тестирования;
- Понятие табличных тестов;
- Пакет gomock для тестирования;
- Golden files;
- Fuzzing;
- Горутины и каналы;
- Сравнение буферизированных и небуферизированных каналов;
- Использование каналов для передачи данных и синхронизации;
- Получение данных из канала: select, range;
- Пул объектов sync.Pool;
- Мьютексы sync.Mutex/RWMutex;
- Словарь sync.Map;
- Условные переменные sync.Cond;
- Группа ожидания sync.WaitGroup, errgroup.WithContext;
- Атомарные операции — пакет atomic;
- Гарантировано одноразовое выполнение sync.Once;
- Понятие сериализации/десериализации;
- Протоколы JSON, XML, protobuf, gob;
- Структурные тэги;
- Архитектура Интернета;
- Клиент-серверное взаимодействие;
- Пакет net/http, работа с HTTP;
- Пакет net, работа с низкоуровневыми протоколами;
- CRUD, REST;
- OpenAPI, Swagger;
- Oauth, basic, jwt;
- Различные варианты конфигурации программы;
- Использование простых форматов конфигурации: .ini, .yaml, .json и т.п.;
- Чтение конфигурации из окружения;
- Библиотека для работы с конфигурацией: viper;
- Стандартная библиотека для логирования;
- Использование интерфейсов для логирования;
- Расширенное логирование на примере zerolog;
- Реляционные/нереляционные СУБД и области их применения;
- Основные понятия реляционных БД;
- Подключение к СУБД и настройка пула соединений;
- Выполнение SQL-запросов и получение результатов;
- Стандартные интерфейсы sql.DB, sql.Rows и sql.Tx;
- Использование транзакций;
- SQL-инъекции;
- Работа с базами данных через пакет gorm;
- Работа с базами данных через пакет sqlx;
- Сравнение монолитной и микросервисной архитектур;
- Плюсы и минусы микросервисов;
- Понятие 12-факторного приложения;
- Пример микросервисов на Golang (сервис регистрации пользователей и сервис рассылки уведомлений);
- gRPC и protobuf;
- Создание gRPC клиента и сервера, лучшие практики gRPC;
- Интерсепторы, надежность (ретраи, задержки);
- LS при работе с gRPC;
- Событийно-ориентированные архитектуры;
- Apache Kafka;
- NATS;
- RabbitMQ;
- Примеры работы с RabbitMQ из Go;
- Возможные проблемы с очередями: перегрузка, падение обработчиков, сбойные сообщения и пр.;
- RequestId;
- OpenTelemetry;
- Jaeger;
- Работа с многими каналами: fan in, fan out;
- Pipelines;
- Cancellation;
- Graceful shutdown;
- Особенности памяти программы на Go;
- Выделение и освобождение памяти на стеке и куче;
- Escape analysis;
- Механизм сборки мусора в Go;
- Обработка аргументов командной строки: flags, pflag;
- Работа с сигналами ОС;
- Запуск внешних программ;
- Стандартные интерфейсы io.Reader, io.Writer и io.Closer;
- Последовательные и произвольные доступы и интерфейс io.Seeker;
- Буферизация ввода/вывода и оптимизация копирования;
- Работа с каталогами;
- Работа с файлами;
- Работа с потоками ввода/вывода;
- Regex;
- Использование пакета reflect;
- Плюсы и минусы рефлексии;
- Reflect.Type и reflect.Value;
- Примеры использования рефлексии;
- Пакет unsafe и тип unsafe.Pointer;
- Понятие кодогенерации, инструмент `go generate`;
- Полезные библиотеки, использующие кодогенерацию: impl, stringer, jsonenums, easyjson и пр.;
- Работа с AST, практическая кодогенерация;
- Бенчмарки;
- Pprof;
- Профилирование;
- Cache miss, cache hit;
- Прогрев кэша;
- LRU, LFU кэш;
- Инвалидация кэша;
- Ленивый кэш;
- Вытеснение данных;
- Основные структуры планировщика: P, M, G;
- Механизм переключения горутин;
- Обработка системных и сетевых вызовов планировщиком.