Описание
Курс также охватывает обработку ошибок и паник, позволяя вам создавать надежные и безопасные программы на Golang.
В дальнейшем, вам будет предложено углубиться в продвинутые темы, такие как многопоточность и параллельное программирование, сетевое программирование и веб-разработка с использованием Golang. Вы изучите работу с базами данных, создание и использование пакетов, а также разработку тестов для проверки функциональности кода. Курс также охватывает аспекты производительности и оптимизации кода, а также лучшие практики разработки на Golang. По окончании курса вы будете готовы к созданию проектов на Golang и использованию его мощных возможностей для разработки современных приложений.Программа состоит из 2-х больших блоков, каждый из которых состоит из отдельных небольших курсов, выстроенных в логической последовательности и содержащих практические задания для отработки навыков как в самостоятельном режиме, так и на онлайн встречах с преподавателем.
Обучение проходит в формате вебинаров с экспертами, самостоятельным выполнением практики.
удостоверение о повышении квалификации государственного образца
Целевая аудитория
Разбираемые темы
-
1.Знакомство с Golang
-
Плюсы и минусы
-
Сферы применения
-
Кто использует
-
-
2.Переменные и элементарные типы данных
-
Типизация в Go
-
Объявление переменной
-
Операция присваивания
-
Арифметические операции
-
Указатели
-
Расположения переменных в памяти
-
Понятие "zero value"
-
Приведение типов
-
Дженерики
-
-
3.Управляющие конструкции языка и отладка программ
-
Конструкции if ... {} else {}, switch
-
Условия и логические операции
-
Цикл for
-
Метки
-
-
4.Функции
-
Виды функций.
-
Сигнатура функции
-
Передача аргументов в функцию по ссылке и по значению
-
Области видимости, {}
-
Ошибки, связанные с областью видимости
-
Замыкания
-
Затенения
-
-
5.ООП в Golang
-
Определение структур
-
Инкапсуляция полей структуры
-
Композиция
-
Выравнивание
-
Методы
-
-
6.Интерфейсы
-
Утиная типизация
-
Композиция интерфейсов
-
Утверждение типов
-
Конструкция type switch
-
Определение и реализация интерфейсов
-
Внутреннее устройство интерфейса
-
Влияние использования интерфейсов на производительность программы
-
Значение типа интерфейс и ошибки, связанные с nil
-
Правила присваивания значений переменным типа интерфейс
-
Опасное и безопасное приведение типов (type cast)
-
-
7.Массивы и слайсы, мапы
-
Массивы и слайсы, мапы
-
Длина и ёмкость
-
Внутренняя структура слайсов и мап
-
Различные способы итерации
-
Частые ошибки и затруднения
-
-
8.Строки и руны
-
Строки, руны и массивы байт
-
Стандартные функции для работы со строками и Unicode
-
Работа со строками через strings builder
-
-
9.Обработка ошибок и паник
-
Интерфейс error
-
Конструкция defer
-
Функции panic и recover.
-
Кастомные ошибки
-
Обертывание ошибок
-
Сопоставление ошибок
-
-
10.Тестирование
-
Виды и назначение тестов, пирамида тестирования
-
Понятие табличных тестов
-
Пакет gomock для тестирования
-
Golden files
-
Fuzzing
-
-
11.Конкурентность и параллелизм в Golang
-
Горутины и каналы
-
Сравнение буферизированных и небуферизованных каналов
-
Использование каналов для передачи данных и синхронизации
-
Получение данных из канала: 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
-
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.Профилирование и оптимизация Go программ
-
Бенчмарки
-
Pprof
-
Профилирование
-
-
28.Кэширование
-
Cache miss, cache hit
-
Прогрев кэша
-
LRU, LFU кэш
-
Инвалидация кэша
-
Ленивый кэш
-
Вытеснение данных
-
-
29.Внутреннее устройство планировщика
-
Основные структуры планировщика: P, M, G
-
Механизм переключения горутин
-
Обработка системных и сетевых вызовов планировщиком
-
-
Итого на программу 80 часов: теория – 40 ч (59%), практика – 40 ч (50%)