Skip to content
Курс Go
Введение в Go: история создания
Initializing search
Курс 1. Окружение разработчика
Курс 2. Язык программирования Golang
Курс 3. Основные принципы программирования
Курс 4. Go pre-project
Курс Go
Курс 1. Окружение разработчика
Курс 1. Окружение разработчика
1 Virtual Box Ubuntu
1 Virtual Box Ubuntu
Virtual Box Ubuntu
WSL2
2 Интегрированная среда разработки
2 Интегрированная среда разработки
Что такое IDE
3 IDE Key Map
3 IDE Key Map
IDE Key Map
Рекомендации по добавлению горячих клавиш
4 Базовые команды Git в IDE
4 Базовые команды Git в IDE
Подготовка репозитория
Сверка историй и внесение изменений
Защита ветки main в Gitlab
Создание Merge Request
Создание файла main.go
Создание веток
Различие merge и rebase: моделирование одновременной разработки функционала
Merge
Rebase
Добавление изменений в ветку feature-4
Моделирование изменений в ветке main
Сверка историй merge и rebase
5 IDE Filewatcher
5 IDE Filewatcher
IDE.Filewatcher
Автоформатирование кода
Автосортировка импортируемых пакетов
Линтер для проверки ошибок
Проверка наличия бинарников
Rebase с ветки main
6 Работа с Gitlab
6 Работа с Gitlab
Gitlab CI/CD
Базовый pipeline gitlab ci
«Базовый pipeline gitlab ci: исправление ошибок»
7 Docker Base
7 Docker Base
Docker Base
Установка Docker Base
Базовые команды в Docker
Экосистема Docker
Запущенные контейнеры: просмотр списка, остановка и удаление контейнера
Portainer — удобный веб-интерфейс управления Docker
Контейнеризация golang-приложения
Docker Registry
8 MySQL Workbench
8 MySQL Workbench
MySQL Workbench
Установка MySQL Workbench
Запуск MySQL server
Подключение и настройка
Выполнение запросов SQL. Подготовка
Выполнение запросов SQL. Создание базы данных
Выполнение запросов SQL. Создание записей, фильтрация, удаление
9 Adminer
9 Adminer
Adminer
Выполнение SQL-запросов
10 Postman
10 Postman
Postman
Создание метода Postman
Переменные и окружения в Postman (Variables и Environment)
Простые встроенные автотесты в Postman
Переменные в CSV и JSON файлах. Как тестировать SOAP в Postman
Перехват HTTP и HTTPS запросов в Postman
11 Итоги модуля
Курс 2. Язык программирования Golang
Курс 2. Язык программирования Golang
1 Введение
1 Введение
Введение в Go: история создания
Почему стоит выбирать Go?
Известные проекты, которые используют Go
Основные потоки управления
Блоки потока управления: if-else
Блоки потока управления: for
Блоки потока управления: switch-case
Выражение и декларация метки: goto
break и continue объявление с метками
Go Toolchain
Самая простая программа на Go
Дополнительные подкоманды Go
Просмотр документации пакета Go в браузерах
Введение в элементы исходного кода
Простая демонстрационная программа Go
Разрывы строк в Go
Ключевые слова и идентификаторы в Go
Базовые типы и основные литералы значений
Основные литералы значений
Основные литералы значений: литералы значений рун
Литералы строковых значений
Представление литералов основных числовых значений
Какой символ использовать для лучшей читабельности
Константы и переменные
О терминологии «присваивание»
Адресация значения
Области действия переменных и именованные константы
Подробнее об объявлениях констант
Введение выведения типов в Go
Объявление констант
Типизированные именованные константы
Автозаполнение в объявлениях констант
iota в объявлениях констант
Переменные, объявления переменных
Переменные: присвоение чистых значений
Короткие формы объявления переменных
Общие операторы
Общие операторы: о переполнениях
Общие операторы: о целочисленных делениях и операциях с остатком
Общие операторы: подробнее о постоянных выражениях
Объявление функций и вызовы функций
Выход (или возврат) фазы вызова функции
Встроенные функции
Пакеты и импорт пакетов
Подробнее о fmt.Printf
Папка пакета, путь импорта пакета и зависимости пакета
Функция init
Полные формы импорта пакетов
Модули
2 Базовые типы
2 Базовые типы
Объявление переменных и констант
Объявление переменных
Глобальные переменные
Объявление констант
Объединение блоков объявления
Указатели в Go
Указатели в Go: зачем они нужны
Указатели в Go: как получить их значения
Указатели в Go: безопасное возвращение указателей
Указатели в Go: преобразование в произвольный тип, их сравнение, присвоение значения
Указатели в Go: можно ли обойти ограничения Go Pointer
Функции в Go
Объявления функций Variadic и вызовы функций Variadic
Подробнее об объявлениях и вызовах функций
Значения функции
Что такое тип данных
Примитивы или базовые типы
Динамические типы int, uint
Динамический тип uint
Динамический тип uint: максимальное число
Динамический тип int
Динамический тип int: внутреннее устройство
Вещественные числа Float
Float: внутреннее устройство
Byte
Byte: внутреннее устройство
Bool
Конвертация типов (Type casting)
3 Композитные типы
3 Композитные типы
Композитные типы, составные типы (Composite types)
Пользовательские типы и экземпляры типов
Объявление алиасных типов
Концепция: базовые типы
Struct (структура)
Композиция структур
Встраивание структур (Embedding)
Array (массив)
Итерация по массиву (range)
Cрезы (slices) с нуля
Slices internal (слайсы внутри)
Заголовок слайса (Slice header)
Емкость слайса (capacity)
Передача слайсов в функции
Механизм append
Встроенная функция Append
Nil слайс
Карта (map)
Хэш\-карты на других языках
Реализация хэш\-карты Go
Строки в Go
Преобразования, связанные со строками
Оптимизация компилятора для преобразований между строками и байтовыми срезами
Другие методы конкатенации строк
Подробнее о сравнении строк
Интерфейсы в Go
Интерфейсы в Go: процесс создания itab и itabTable
Интерфейсы в Go: полиморфизм
Интерфейсы в Go: рефлексия (reflection)
Подробнее об интерфейсах Go
Интерфейсы в Go: упаковка значений
Функции make и new
4 Пакеты
4 Пакеты
Пакеты Go
Пакеты Go: порядок инициализации
Go модули
Изменение версии библиотеки, импорт пакета, компиляция и запуск программ
5 Функции
5 Функции
Возвращаемый результат функции
Обработка ошибок в Go: что это и как создать ошибку
Обработка ошибок в Go
Обработка ошибок в Go: возврат ошибок вместе со значениями
Обработка ошибок в Go: сокращение шаблонного кода
Обработка ошибок функций с несколькими возвращаемыми значениями
Пользовательские ошибки
Утверждение типа и пользовательские ошибки
Оборачивание ошибок
Функции первого класса, замыкания и анонимные функции в Go
Замыкания (Closures) и анонимные функции в Go
Go: отложенные функции
Unit\-тестирование
Unit\-тестирование: модульный тест
Unit\-тестирование: подтест
Бенчмарк
6 ООП
6 ООП
Методы
Методы структур
Методы указателей
ООП
Наследование
Композиция
Хранение ссылки на структуру того же типа
7 Стандартные библиотеки
7 Стандартные библиотеки
Пакет Strings
Пакет Strings: функции поиска строки
Пакет Strings: определение длины строки и манипуляции со строками
Пакет Strings: функции repeat и replace
Пакет Strings: функции ToLower и ToUpper
Пакет Strings: функции Trim, TrimFunc и TrimSpace
Пакет Strings: функции Count и Cut
Пакет Strings: функции HasPrefix и HasSuffix
Пакет database
Законы рефлексии в Go
Рефлексия тэгов
Дополнительные функции рефлексии
Тип reflect.Value и его значения
Рефлексия карт (map)
Функция reflect.ValueOf
Метод Canconvert
Пакет UTF8
Пакет Golang UTF8 DecodeRune
Пакет Golang UTF8 DecodeLastRune
Пакет Golang UTF8 EncodeRune
Функции UTF8 RuneCount, RuneCountInString и Valid
Пакет fmt
Чтение файлов в Go
Запись файлов в Go
Пакет io
Полезные типы и пакеты для ввода-вывода: буферизованный ввод-вывод
Полезные типы и пакеты для ввода-вывода: пакет ioutil
Пакет io: правила чтения и потоковые данные
Пакет io: цепочка reader’ов
io.Writer
Реализация пользовательского io.Writer
Полезные типы и пакеты для ввода-вывода: os.File и стандартные типы
Полезные типы и пакеты для ввода-вывода: io.Copy()
Полезные типы и пакеты для ввода-вывода: io.WriteString()
Полезные типы и пакеты для ввода-вывода: Pipe writers и readers
JSON Marshal
Преобразование данных в JSON
JSON Marshal: обработка типов данных
JSON Marshal: абстрактные типы данных
JSON Marshal: преобразование типа данных
JSON Marshal: использование тегов структуры
JSON Marshal: работа с map
JSON Unmarshal
JSON Unmarshal: обработка сложных данных
JSON Unmarshal: приоритеты полей
JSON Unmarshal: использование тегов структуры
JSON Unmarshal: работа с картами
JSON Unmarshal: использование Unmarshaler и TextUnmarshaler
JSON Unmarshal: кодер и декодер
Пакет flag в Go
Пакет flag в Go: работа с позиционными аргументами
Пакет flag в Go: FlagSet для реализации субкоманд
8 Многопоточность
8 Многопоточность
Горутины
Горутины: конкурентная синхронизация
Горутины: состояния горутин
Горутины: планировщик
Горутины: отложенные вызовы функций
Горутины: паника и восстановление
Каналы
Ограничение скорости и переключатели
Манипуляции с потоком данных
Агрегация данных
Проверка/фильтрация данных
Варианты запроса-ответа
Таймер: уведомление по расписанию
Использование каналов в качестве блокировки мьютекса или счетных семафоров
Диалог (пинг-понг) и инкапсулирование канала
Проверка длины и пропускной способности каналов
Блокирование горутины, операции «попытка-отправка/получить»
Проверка закрытия канала без блокировки текущей горутины, ограничения
Тайм-аут и бегущая строка
Закрытие каналов
Закрытие каналов: решения грубого закрытия
Закрытие каналов: решения вежливого закрытия
Закрытие каналов: примеры закрытия
Контексты
Мьютексы
Использование mutex.Lock() и mutex.Unlock()
9 Runtime
9 Runtime
Планировщик ОС
Планировщик ОС: инструкция по выполнению
Планировщик ОС: состояние и виды работ потока
Планировщик ОС: переключение контекста
Планировщик ОС: поиск баланса
Планировщик ОС: линии кэша и ложный обмен
Планировщик ОС: сценарий решения о планировании
Планировщик в Go
Планировщик в Go: кооперативная многозадачность
Планировщик в Go: переключение контекста
Планировщик в Go: (а)синхронные системные вызовы
Планировщик в Go: Worker stealing
Конкурентная модель
Виды нагрузок
Прибавление чисел
Сортировка
Чтение файлов
Пакет runtime
Garbage collector. Сборщик мусора
10 Оптимизация
10 Оптимизация
Профилирование
Оптимизация regex
Оптимизация regex: бенчмарк
Оптимизация преобразования json
Курс 3. Основные принципы программирования
Курс 3. Основные принципы программирования
1 Паттерны
1 Паттерны
Введение в паттерны
История паттернов
Паттерн Proxy (заместитель)
Структура работы заместителя
Применимость и шаги реализации заместителя
Отношения заместителя с другими паттернами
Паттерн Adapter (адаптер)
Структура работы адаптера
Применимость и шаги реализации Adapter
Отношения Adapter с другими паттернами
Паттерн Facade (фасад)
Структура работы Facade
Применимость и шаги реализации Facade
Отношения Facade с другими паттернами
Паттерн Abstract Factory (абстрактная фабрика)
Структура работы Abstract Factory
Применимость и шаги реализации Abstract Factory
Отношения Abstract Factory с другими паттернами
Паттерн Strategy (стратегия)
Структура работы Strategy
Применимость и шаги реализации Strategy
Отношения Strategy с другими паттернами
2 Алгоритмы и структуры данных
2 Алгоритмы и структуры данных
Связанные списки
Оптимизация Append
Удаление Post
Вставка Post
Решение задач leetcode
Binary Tree
Реализация пользовательского двоичного дерева поиска в Go
B-Tree
Использование B-дерева в базах данных
Структура данных Heap (кучи) и Stack (стека)
Операции с Heap
Пример работы кучи в Golang
Stack
Пример работы стека в Golang
Сложность алгоритма. Big O notation
Упрощение формулы сложности
Обозначение Big-O: классы времени
Обозначение Big-O: сравнение
Обозначение Big-O: улучшение и смена алгоритма
Влияние скорости выполнения на используемое пространство памяти
Обозначение Big-O: использование приближения и эвристики
BubbleSort (сортировка пузырьком)
Реализация BubbleSort на Go
Реализация BubbleSort на Go: кейсы с отсортированным слайсом
QuickSort (быстрая сортировка)
QuickSort (быстрая сортировка): бенчмарк и сравнение с BubbleSort
MergeSort (сортировка слиянием)
3 Чистая архитектура
3 Чистая архитектура
Чистая архитектура
Принципы и преимущества чистой архитектуры
Слои чистой архитектуры
Принципы SOLID
4 Особые проверяемые задания
Курс 4. Go pre-project
Курс 4. Go pre-project
1 Веб-сервер
1 Веб-сервер
Веб-сервер TCP/IP
Веб-сервер net/http
Веб-сервер Graceful shutdown
Веб-сервер Swagger
Swagger для HTTP API
Кодогенерация PetStorage
Имплементация PetStorage
Интеграция PetStorage с веб-сервером
Добавление хендлеров в документацию
2 Контейнеризация
2 Контейнеризация
Linux
Что нужно знать о Linux
Ядро Linux и его модули
Docker and kernel modules
Процессы Linux
Процессы в Docker
Selenium Docker
Selenium в Golang
Контейнеризация приложения
Docker Compose
3 Базы данных
3 Базы данных
Базы данных SQL
Создание таблицы. Индексы
SQLX и NOSQL
4 Планирование проекта
4 Планирование проекта
Выбор стека
О Postgres
Redis: хранилище данных в памяти
Примеры использования Redis
Выбор фреймворков
Gin gonic
Boilerplate
Go boilerplate
Пакет internal
Entrypoint и Bootstrap
Старт приложения
Авторизация
Создание защищенного роута
Миграции
Работа с хранилищем
Мок-объекты и тестирование
Мок-объекты на практике
5 Высоконагруженные сервисы
5 Высоконагруженные сервисы
Введение в микросервисы
Способы взаимодействия микросервисов
Оптимизация базы данных
Концептуальный подход RPC
JSON-RPC и его использование в Golang
JSON-RPC goboilerplate
GRPC
Message brokers
Метрики высоконагруженных сервисов
6 Менеджмент
6 Менеджмент
Роли в команде
Цикл разработки
Этапы разработки
Бэкэнд-разработка
Agile-методология
Спринты, бэклог и скрам
Kanban vs Scrum
Выбор тасктрекера: обзор Jira, Trello и GitLab
Формирование задач и использование ATDD
Введение в Go: история создания