Курс также охватывает обработку ошибок и паник, позволяя вам создавать надежные и безопасные программы на Golang.
В будущем вы сможете углубиться в более сложные темы, включая многопоточность, параллельное и сетевое программирование, веб-разработку на Golang. Вы изучите работу с базами данных, создание пакетов, а также разработку тестов для проверки функциональности вашего кода. Помимо этого курс охватывает аспекты производительности и оптимизации кода, а также лучшие практики разработки на 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
Интерсепторы, надежность (ретраи, задержки)
TLS при работе с 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
Механизм переключения горутин
Обработка системных и сетевых вызовов планировщиком
95 000 ₽
85 500 ₽ — для физ. лиц