Разработчик Golang

Разработка сетевых приложений и микросервисов на Go

Длительность

5 месяцев

Начало занятий

В августе

Продолжительность
5 месяцев, 4 академических часа в неделю
Начало занятий
В августе
Что даст вам этот курс

При переходе на Go люди зачастую сталкиваются с различными неудобствами, вызванными непохожестью Go на другие языки программирования. В этом курсе мы хотели бы объяснить что такое Go-way, рассказать про идиомы языка и помочь избежать типичных ошибок. Программа курса позволит погрузиться в разработку на Go для решения практических задач, углубления знаний в языке и сопутствующем технологическом стеке.

Этот курс подойдет для:

- web-разработчиков, которые хотят переквалифицироваться в Go и расширить свой уровень мастерства;
- всех тех, кто уже разобрался с основой Go и хочет начать применять язык правильно.

Особенности курса:


Изучите внутренние механизмы языка Go, а не только синтаксис языка

Рассмотрите реальные проблемы и их решения, с которыми столкнулись авторы при работе с Go

Разберете реальные кейсы перевода на стек языка Golang с других технологических стеков (PHP, C#) крупных высоконагруженных проектов

Разработаете собственный микросервис в качестве проектной работы


По окончании курса студент будет:

- писать production-ready код, многопоточные и конкурентные программы;
- понимать синтаксис и внутреннее устройство языка Go;
- понимать особенности сетевого программирования;
- уметь создавать микросервисы с помощью Go;
- способен разворачивать микросервисы с помощью docker.
Старайтесь решить проблему как можно проще, сложное решение получится само по себе.
Дмитрий Смаль
Преподаватель курса
Старайтесь решить проблему как можно проще, сложное решение получится само по себе.
Дмитрий Смаль
Преподаватель курса
Преподаватели
Дмитрий Смаль
Старший разработчик в Yandex
Александр Давыдов
Lazada Tech Hub Russia
Занимается разработкой инфраструктуры Яндекс.Облако и поддержкой реляционных баз данных. За 10 лет прошёл путь от рядового разработчика до старшего программиста в NetCracker, Agava, Mail.Ru Group (проектов «Игры», «Здоровье» и «Дети») и Яндексе.

Может спроектировать архитектуру, реализовать проект с помощью небольшой команды, развернуть необходимую инфраструктуру, организовать процесс разработки и деплоя. Разрабатывал сервера, поддерживающие 500k+ подключений, собирал модный фронтенд на React, отправлял тонны писем по SMTP, проектировал API и базы данных. Владеет Python, JavaScript, Go, Perl и другими языками и технологиями.

Окончил Московский физико-технический институт, где получил степень магистра. Около 6 лет был лектором в Технопарке и Технотреке Mail.Ru. Читал лекции, проводил практические занятия и экзамены. Записал видео-курс «Web-технологии» на Stepik. Проекты на гитхабе - https://github.com/mialinx
В отрасли с 2009 года. Пилил монолит в Lazada, готовил ETL/data pipelines в IPONWEB, разрабатывал инфраструктурные проекты для антиспама в Яндексе. Также был СТО в programmatic-стартапе «Трамплин Медиа».

Опытный разработчик, знает несколько языков программирования (Golang, Python, Perl). Окончил факультет прикладной математики в Московском институте электроники и математики.

В настоящее время проектирует микросервисную архитектуру (Golang/Kubernetes Openshift) в стартапе про умную адресуемую рекламу.

В свободное от работы время интересуется покером, кофе и… Golang — куда же без него?
Дмитрий
Смаль
Александр
Давыдов
Преподаватели
Дмитрий Смаль
Старший разработчик в Yandex
Занимается разработкой инфраструктуры Яндекс.Облако и поддержкой реляционных баз данных. За 10 лет прошёл путь от рядового разработчика до старшего программиста в NetCracker, Agava, Mail.Ru Group (проектов «Игры», «Здоровье» и «Дети») и Яндексе.

Может спроектировать архитектуру, реализовать проект с помощью небольшой команды, развернуть необходимую инфраструктуру, организовать процесс разработки и деплоя. Разрабатывал сервера, поддерживающие 500k+ подключений, собирал модный фронтенд на React, отправлял тонны писем по SMTP, проектировал API и базы данных. Владеет Python, JavaScript, Go, Perl и другими языками и технологиями.

Окончил Московский физико-технический институт, где получил степень магистра. Около 6 лет был лектором в Технопарке и Технотреке Mail.Ru. Читал лекции, проводил практические занятия и экзамены. Записал видео-курс «Web-технологии» на Stepik. Проекты на гитхабе - https://github.com/mialinx
Александр Давыдов
Lazada Tech Hub Russia
В отрасли с 2009 года. Пилил монолит в Lazada, готовил ETL/data pipelines в IPONWEB, разрабатывал инфраструктурные проекты для антиспама в Яндексе. Также был СТО в programmatic-стартапе «Трамплин Медиа».

Опытный разработчик, знает несколько языков программирования (Golang, Python, Perl). Окончил факультет прикладной математики в Московском институте электроники и математики.

В настоящее время проектирует микросервисную архитектуру (Golang/Kubernetes Openshift) в стартапе про умную адресуемую рекламу.

В свободное от работы время интересуется покером, кофе и… Golang — куда же без него?
Минимальные знания

- Опыт разработки от 1 года
- Опыт разработки web-приложений
- Знания по основным конструкциям и синтаксису Golang

Будет плюсом:
- знание одного из ЯП, в особенности С/C++;
- опыт администрирования Linux.
Процесс обучения
Всё обучение проходит онлайн: вебинары, общение с преподавателями и вашей группой в слаке курса, сдача домашних работ и получение обратной связи от преподавателя.

Вебинары идут дважды в неделю по 1,5 часа. Все вебинары сохраняются и в записи в вашем личном кабинете.

Домашнее задание выдается в среднем одно в неделю, а его выполнение занимает от 2 до 5 часов. Мы горячо призываем заниматься такой самостоятельной работой, так как это поможет вам качественно освоить все изучаемые технологии на практике с поддержкой и обратной связью наших преподавателей.

Возникающие вопросы по материалам лекций, домашним заданиям и по выпускному проекту вы сможете задавать преподавателю в слаке или во время вебинаров.

Курс длится 5 месяцев, из которых финальный отводится для выполнения проектной работы.

Выполнение проектной работы помогает усвоению практических навыков, а тема проекта отдельно выносится в сертификат. Во время работы над проектом студенты получают консультации и обратную связь от преподавателей в слаке группы и на проектных занятиях.
Программа обучения
Модуль 1
Начало работы с Go
Модуль 2
Стандартные библиотеки и практики
Модуль 3
Cетевое взаимодействие
Модуль 4
Микросервисы
Модуль 5
Проект
Начало работы с Go
В первом модуле мы изучим Go как язык. Рассмотрим основные синтаксические конструкции и их выполнение в рантайме. Основное внимание уделим конструкция уникальным для языка Go, которых нет в другом языке.
Тема 1: Начало работы c Go
* Установка рабочего окружение Go
* Установка компилятора и тулчейна
* Компиляция и запуск программ на Go
* Подключение библиотек
* Основные синтаксические конструкции
* Публичные и приватные идентификаторы
Домашние задания: 2
1 Hello now()
Завести Go репозиторий на GitHub, написать программу печатающую текущее время / точное время с использованием библиотеки NTP
2 Сокращатель ссылок - часть 1
Цель: Цель ДЗ - разобраться, что такое и как работают интерфейсы, методы и типы. Впоследствии мы реализуем полноценный API для сервиса сокращения ссылок. Это творческая задачка, которая потребует изучения документации, самостоятельной работы и общения с преподавателями.
Тема 2: Элементарные типы данных в Go
* Элементарные типы
* Zero value
* Константы
* Указатели
* Строки и руны и массивы байтов
* Стандартный функции для работы со строками и Unicode
* Преобразование и присвоение типов
* Передача по ссылке и значению
Домашние задания: 1
1 Распаковка строки
Создать Go функцию, осуществляющую примитивную распаковку строки, содержащую повторяющиеся символы / руны, например:

* "a4bc2d5e" => "aaaabccddddde"
* "abcd" => "abcd"
* "45" => "" (некорректная строка)
* `qwe\4\5` => `qwe45` (*)
* `qwe\45` => `qwe44444` (*)
* `qwe\\5` => `qwe\\\\\` (*)

Тема 3: Слайсы и словари
* Отличия массивов и слайсов
* Внутренняя структура слайсов и словарей
* Создание и работа со слайсами и словарями
* Отличие длинны и емкости (length vs capacity)
* Различные способы итерации
* Сортировка
* Распространные ошибки и затруднения
Домашние задания: 1
1 Частотный анализ
Написать функцию, которая получает на вход текст и возвращает
10 самых часто встречающихся слов без учета словоформ
Тема 4: Функции и обработка ошибок
* Функции и области видимости
* Замыкания
* Функции с переменным числом аргументов
* Типы ошибок
* panic, recover и defer
* Стек-трейсы
* Best practiсe обработки ошибок
Домашние задания: 1
1 Поиск максимума
Написать функцию находящую максимальный элемент в слайсе
с произвольными элементами ([]interface{}) с использованием
пользовательской функции-компаратора.
Тема 5: Структуры
* Определение структур
* Вложенные и анонимные структуры
* Тэги элементов структуры
* Использование тэгов для JSON и работы с СУБД
* Публичные структуры и публичные элементы структур
* Методы типов
Домашние задания: 1
1 Двусвязный список
Реализовать двусвязанный список на языке Go
Тема 6: Интерфейсы
* Определение и реализация интерфейсов
* Внутренняя структура интерфейсов
* Интерфейсы как "универсальный" тип
* Определение типа значения интерфейса
* Опасный и безопасный type cast
* Конструкций switch
* Слайсы и словари с интерфейсами
* Где мои generic-и?
Домашние задания: 1
1 Поиск элемента в JSON
Реализовать функцию json_path, получающую на вход JSON документ,
путь в это документе и возвращающую значение по данному пути.
Обработать возможные ошибки.
Тема 7: Горутины и каналы
* Запуск горутин
* Каналы, внутреняя структура канала
* Буферизованные и небуферизованные каналы
* Операции работы с каналами
* Использование каналов для передачи данных и синхронизации
* Конструкция select
* Таймеры в Go
20 июня, 20:00 — 21:30
Лектор: Дмитрий Смаль
Домашние задания: 1
1 Объединение каналов
Написать функцию, объединяющую несколько каналов в один. Принимает слайс с каналами []chan interface{}, возвращает один канал chan interface{}
Тема 8: Примитивы синхронизации
* Мьютексы
* Условные переменные
* Гарантировано одноразовое выполнение
* Pool и WaitGroup
* Модель памяти в Go
* Race-детектор
25 июня, 20:00 — 21:30
Лектор: Александр Давыдов
Домашние задания: 1
1 Параллельное исполнение
Сделать функцию для параллельного выполнения N заданий.
Принимает на вход слайс с заданиями `[]func()error`, число заданий которые можно выполнять параллельно `N` и максимальное число ошибок после которого нужно приостановить обработку. Учесть что задания могу выполняться разное время.
Тема 9: Пакеты и библиотеки
* Импорт пакетов
* Алиасы и импорт без использования
* init функции и порядок инициализации пакетов
* internal пакеты
* Рекомендованная структура проекта
27 июня, 20:00 — 21:30
Лектор: Дмитрий Смаль
Домашние задания: 1
1 Оформление пакета
Оформить функции из домашних заданий 1.2 и 1.3 в виде отдельного проекта.
Сделать интерфейс командной строки CLI для вызова этих функций.
Стандартные библиотеки и практики
Во втором модуле мы познакомимся с основными функциями стандартной библиотеки Go, а так же наиболее популярными open-source библиотеками. Научимся пользоваться инструментами для управления зависимостями, тестирования и профилирования Go кода.
Тема 1: Инструменты Go разработчика
* Подробнее про GOROOT и GOPATH
* Сборка модулей и установка программ: go build, go install
* Модули и зависимости: dep и vgo
* Форматирование кода: go fmt, fix
* Линтеры: go vet, golint, металинтеры
2 июля, 20:00 — 21:30
Домашние задания: 1
1 Публикация библиотеки
Оформить программу из задания 1.1 в виде GitHub проекта.
Описать и проверить установку зависимостей с помощью dep.
Настроить и запустить линтеры, создать Makefile для автоматизации проверки и сборки проекта
Тема 2: Работа с вводом/выводом
* Тип Buffer
* Стандартные интерфейсы: Reader, Scanner, Writer, Closer
* Блочные устройства, Seeker
* Форматированный ввод и вывод: fmt
4 июля, 20:00 — 21:30
Домашние задания: 1
1 Копирование файлов
Реализовать утилиту копирования файлов (см man dd).
Выводить в консоль прогресс копирования
Тема 3: Форматирование данных
* base64 и другие форматы строк, кодировки
* Текстовые форматы: JSON, XML, YAML
* Использование стуктур и интерфейсов для парсинга
* Бинарные форматы: MsgPack и ProtocolBuffers
9 июля, 20:00 — 21:30
Домашние задания: 1
1 Обработка JWT токенов
Сделать утилиту консольную утилиту для кодирования, декодирования JWT токенов
Тема 4: Взаимодействие с OS
* Обработка аргументов командной строки: flags, cobra
* Работа с переменными окружения
* Запуск внешних программ
* Работа с файловой системой
* Временные файлы
* Обработка сигналов
11 июля, 20:00 — 21:30
Домашние задания: 1
1 Утилита envdir

Реализовать утилиту envdir на Go.
Эта утилита позволяет запускать программы получая переменные окружения из определенной директории. См man envdir
Тема 5: Файлы конфигурации и логирование
* Различные варианты конфигурации
* Использование простых форматов: ini, yaml и т.п.
* Библиотеки для работы с конфигурацией: viper и confita
* Стандартная библиотека для логирования
* Расширенное логирование с помощью Zap
16 июля, 20:00 — 21:30
Домашние задания: 1
1 Каркас микросервиса
Реализовать "каркас" микросервиса, считывающий конфиг из файла,
создающий логгер/логгеры с указанными уровнями детализации.
Тема 6: Рефлексия
* Использование пакета reflect
* Type и Value
* Использование рефлексии совместно с type switch
* Пакет unsafe и тип unsafe.Pointer
* Пример использования рефлексии
18 июля, 20:00 — 21:30
Домашние задания: 1
1 Сериализация JSON
Сделать простой JSON сериализатор: функцию, которая принимает interface{} и возвращает строку, содержащую JSON. Учитывать тэги структур.
Тема 7: Кодогенерация в Go
* Примеры применения кодогенерации
* Команда go generate
* Генерация кода по Protobuf спецификациям
23 июля, 20:00 — 21:30
Домашние задания: 1
1 Простейший календарь
Сделать "заготовку" для микросервиса-календаря. Определить структуру определяющую событие, написать методы для добавления/изменения/удаления событий. Хранить события в памяти, без персистентности.
Тема 8: Профилирование и оптимизация Go программ
* Общая информация о профилировании
* Виды профайлеров
* Профилирование использования CPU
* Профилирование выделения памяти
* Flame диаграммы
* Общие оптмизации в Go
* Оптимизации выделения памяти
25 июля, 20:00 — 21:30
Домашние задания: 1
1 Оптимизация производительности
Провести анализ производительности программы из дз 2.6.
Построить Flame диаграммы и выявить наиболее медленные фрагменты.
Попытаться улучшить производительность.
Cетевое взаимодействие
Go чаще все используется для написания сетевых сервисов. В третьем модуле мы изучим как работать с сетью в языке Go. Рассмотрим стандартные протоколы и формат, а так же напишем простой сервер. Отдельное внимание будет уделено обработке ошибок возникающих при работе с сетью.
Тема 1: Go Internals
* Как работает планировщик в Go
* Блокирующие и неблокирующие вызовы
* Goroutines and Threads
* Вызовы С функций в Go, CGO
6 августа, 20:00 — 21:30
Домашние задания: 1
1 Самый популярный IP Белорусии
Выяснить на каком IP адресе содержится больше всего доменов из зоны .by
Сравнить скорость работы с использованием CGO и Pure-Go DNS resolver.
Сравнить количество потоков и нагрузку на систему.
Список доменов: http://csa.ee/databases-domain-lists/
Тема 2: Низкоуровневые протоколы TCP, UDP, DNS
* Стандартные интерфейсы - Dialer, Conn
* Возможные сетевые проблемы: потеря пакетов, подвисшие соединения, недоступность
* Таймауты и контекст
* Отладка сетевых проблем
8 августа, 20:00 — 21:30
Домашние задания: 1
1 Telnet
Реализовать telnet клиент (см man telnet)
Тема 3: HTTP библиотека
* Использование HTTP клиента
* Создание простого HTTP сервера
* Декораторы и middleware
* HTTP/1.1 и HTTP/2.0
* REST
* Протокол S3
13 августа, 20:00 — 21:30
Домашние задания: 1
1 REST сервис
Используя go-swagger сделать REST сервер и CLI клиент для сервиса-календаря из дз 2.7. Поскольку swagger генерирует занчительную часть кода имеет смысл сделать это отдельным проектом.
Тема 4: GRPC
* Описание API с помощью Protobuf
* Генерация кода для GRPC клиента и сервера
* Реализация API
* Прямая и обратная совместимость API
* Представление о Clean Architecture
15 августа, 20:00 — 21:30
Домашние задания: 1
1 GRPC сервис
Создать GRPC спецификацию для сервиса-календаря из дз 2.7.
Сгенерировать GRPC сервер и клиент, проверить работу сервиса.
Отделить модель данных от Protobuf структур.
Тема 5: Работа с SQL
* Стандартные интерфейсы sql.DB, sql.Rows, sql.Tx
* Подключение к СУБД и настройка пула подключений
* Выполнение запросов и получение результатов
* Простейшие SQL запросы
20 августа, 20:00 — 21:30
Домашние задания: 1
1 Работа с базами данных
Изменить код сервиса-календаря, так что бы события хранились в базе данных.
Тема 6: Продвинутая работа с базами
* Использование sqlx хелперов
* Работа с NULL значениями
* Использование транзакций
* Миграция баз данных
22 августа, 20:00 — 21:30
Домашние задания: 1
1 Миграции баз данных
Изменить код сервиса-календаря, добавить поддержку событий "на весь день". Использовать sqlx. Написать миграции для базы данных.
Тема 7: NoSQL базы данных
* Встроенные базы данных, BoltDB
* Использование Redis для кеширования данных
* Выбор базы данных для проекта
27 августа, 20:00 — 21:30
Домашние задания: 1
1 Кеширование данных
Реализовать методы "события на текущую неделю" и "события на текущий месяц", кешировать результаты выбороки в Redis
Тема 8: Очереди сообщений
* Использование RabbitMQ, Kafka
* Возможные проблемы с очередями: перегрузка, падение обработчиков, сбойные сообщения
* Запуск пула обработчиков с помощью systemd или supervisor
29 августа, 20:00 — 21:30
Домашние задания: 1
1 Работа с очередями
Реализовать "напоминания" о событиях с помощью RabbitMQ.
Создать процесс, который периодически сканирует основную базу данных, выбирая события о которых нужно напомнить. Создать процесс, который читает сообщения из очереди и шлет уведомления.
Микросервисы
В четвертом модуле мы рассмотрим вопросы архитектуры web сервисов, в частности популярную сейчас микросервисную архитектуру. Рассмотрим вопросы тестирования, развертывания и эксплуатации приложении.
Тема 1: Монолит и микросервисы
* Отличия микросервисов от монолитной архитектуры
* Преимущества микросервисов
* 12 factor applications
* Архитектура одного микросервиса
* Clean Architecture
10 сентября, 20:00 — 21:30
Домашние задания: 1
1 Доработка сервиса
Доработать дз 3.8, разделив код на отдельные сервисы
Тема 2: Docker
* Основные команды docker
* Представление о контейнер и образе
* Сборка собственных Docker контейнеров
* Запуск и управление контейнерами
* Передача конфигурации и получение логов
* Использование Docker Registry
12 сентября, 20:00 — 21:30
Домашние задания: 1
1 Докеризация сервиса
Подготовить Docker файлы для каждого из сервисов из дз 3.8.
Собрать образы и загрузить в DockerHub
Тема 3: Тестирование микросервисов
* Использование docker-compose
* Интеграционные тесты
* Behaviour Driven Development
* Описание тестов на языке Gherkin
* Использование godog для запуска тестов
26 сентября, 20:00 — 21:30
Домашние задания: 1
1 Интеграционное тестирование
Создать docker-compose файл, поднимающий все сервисы проекта, включая базу и очередь. Написать простейший интеграционный тест для проекта.
Тема 4: Kubernetes
* Docker Swarm
* Puppet
* Ansible
* Как мы решаем проблему запуска сервсисов на более 1 машины
17 сентября, 20:00 — 21:30
Домашние задания: 1
1 Разворачивание в kubernetes
Развернуть проект в Kubernetes. Создать описания pod-ов и service-ов.
Избавиться от hard-code IP в конфигах проектов.
Тема 5: Обнаружение сервисов
* Необходимость Service Discovery
* Использование DNS
* Использование DCS: zookeeper, etcd, consul
19 сентября, 20:00 — 21:30
Домашние задания: 1
1 Разворачивание в kubernetes
Продолжение дз 4.4
Тема 6: Мониторинг
* Проверка работоспособности сервисов
* Health Check в Docker
* Системные метрики: LA, CPU, MEM, IO
* Количественный мониторинг, prometheus
24 сентября, 20:00 — 21:30
Домашние задания: 1
1 Мониторинг сервиса
Обеспечить простейший мониторинг проекта с помощью prometheus
Тема 7: Использование CI
* GitLab pipelines
1 октября, 20:00 — 21:30
Домашние задания: 1
1 Continuous integration
Автоматизировать тестирование и выкатку новых версий с помощью CI
Проект
Проект, разрабатываемый студентами, будет представлять собой реализацию микросервиса с полным набором компонентов, таких как: логгирование, liveness пробы, make файлы, тесты, статические анализаторы кода, файлы для деплоя, образ в docker, репозиторий и т.п.)
Тема 1: Проектная работа
8 октября, 20:00 — 21:30
Домашние задания: 1
1 Проект
Тема 2: Консультация по проектам
15 октября, 20:00 — 21:30
Тема 3: Презентация проектов
31 октября, 20:00 — 21:30
Выпускной проект
В завершении курса студентам будет предложено выполнить один из трех проектов на выбор:
1. Микросервис для борьбы с брут-форсом.
2. Сервис для подготовки превью изображений.
3. Простейшая система сбора данных.
Прошедшие открытые вебинары по курсу
Открытый вебинар — это настоящее занятие в режиме он-лайн с преподавателем курса, которое позволяет посмотреть, как проходит процесс обучения. В ходе занятия слушатели имеют возможность задать вопросы и получить знания по реальным практическим кейсам.
Обзор микрофреймворков в Golang
Александр Давыдов
День открытых дверей
23 мая в 20:00
После обучения вы

  • заберете с собой полный комплект обучающих материалов: видеозаписи всех вебинаров и презентации к занятиям;

  • сохраните в GitHub пример работоспособного сервиса на Go, которым не стыдно будет похвастаться;

  • получите сертификат о прохождении курса;

  • получите приглашение пройти собеседование в компаниях-партнерах (эту возможность получают самые успешные студенты).

Дата выдачи сертификата: 16 августа 2019 года
Ваш сертификат

онлайн-образование

Сертификат №0001

Константин Константинопольский

Успешно закончил курс «Разработчик Golang»
Выполнено практических заданий: 16 из 16

Общество с ограниченной ответственностью “Отус Онлайн-Образование”

Город:
Москва

Генеральный директор ООО “Отус Онлайн-Образование”
Виталий Чибриков

Лицензия на осуществление образовательной деятельности
№ 039825 от 28 декабря 2018г.

онлайн-образование

Сертификат №0001

Константин Константинопольский

Успешно закончил курс «Разработчик Golang»
Выполнено практических заданий: 16 из 16

Общество с ограниченной ответственностью “Отус Онлайн-Образование”

Город:
Москва

Генеральный директор ООО “Отус Онлайн-Образование”
Виталий Чибриков

Лицензия на осуществление образовательной деятельности
№ 039825 от 28 декабря 2018г.