module
Version:
v0.0.0-...-5edb3c8
Opens a new window with list of versions in this module.
Published: Aug 6, 2023
License: GPL-3.0
Opens a new window with license information.
README
¶
Golang. Введение в многопоточность и архитектуру проектов.
Многопоточность в Go
План:
- Понятие многопоточности
- Параллелизм vs. Конкурентность
- Преимущества и недостатки многопоточности
- Основные понятия: горутины и планировщик
- Создание горутин с помощью ключевого слова go
- Контроль выполнения программы с помощью sync.WaitGroup
- Понимание конкурентности и порядка выполнения горутин
- Каналы как механизм обмена данными
- Основные операции с каналами: отправка и получение данных
- Блокировка и ожидание данных на каналах
- Проблемы конкурентного доступа к данным
- Мьютексы для синхронизации доступа к общим данным
- Атомарные операции и атомарные типы данных
- Паттерн "Пул горутин" для ограничения количества одновременно выполняющихся горутин
- Использование context для управления временем выполнения горутин
Полезные ссылки:
- Документация Go: https://golang.org/doc/
- Статья "Concurrency in Go": https://golang.org/doc/effective_go.html#concurrency
- Презентация "Go Concurrency Patterns": https://talks.golang.org/2012/concurrency.slide
- Видео "Advanced Go Concurrency Patterns": https://www.youtube.com/watch?v=QDDwwePbDtw
- Контексты Go: https://go.dev/blog/context
- Управление go-рутинами с помощью контекстов: https://levelup.gitconnected.com/how-to-use-context-to-manage-your-goroutines-like-a-boss-ef1e478919e6
Практические задания:
- Написать программу, которая считает сумму чисел от 1 до N с использованием горутин и каналов.
- Создать пул горутин для параллельной загрузки нескольких файлов с интернета.
- Реализовать потокобезопасную структуру данных для хранения ключей и значений.
Архитектура проектов на Go
План:
- Зачем нужна архитектура проекта и как она помогает в разработке программного обеспечения.
- Обзор различных архитектурных подходов, таких как MVC, CQRS, Clean Architecture и др.
- Основные принципы архитектуры проектов и их важность для сопровождения и масштабирования проектов.
- Различные архитектурные подходы и паттерны, используемые в Go.
- Разделение проекта на модули и пакеты для улучшения организации кода.
- Использование пакета main и других пакетов для разделения функциональности проекта.
- Принципы SOLID и их применение для проектирования структуры проекта.
- Понятие компонентов и их взаимодействие внутри проекта.
- Управление зависимостями между компонентами с использованием инверсии управления (IoC) и внедрения зависимостей (DI).
- Применение интерфейсов для уменьшения зависимостей и облегчения тестирования.
- Применение подходов на практике: выбор подходящей архитектуры для конкретного проекта.
- Практические советы по реализации архитектурных подходов в Go.
Полезные ссылки:
- Статья "Package names": https://blog.golang.org/package-names
- Документация по стандартному пакету Go: https://pkg.go.dev/std
- Презентация "High Performance Go Workshop": https://dave.cheney.net/high-performance-go-workshop/dotgo-paris.html
- База знаний Go: https://go101.org/
- Типовая структура проекта Go: https://lets-go-further.alexedwards.net/sample/02.01-project-setup-and-skeleton-structure.html
- Генератор бойлерплэйта: https://github.com/gostaticanalysis/skeleton
Практические задания:
- Создать базовую структуру проекта на Go с использованием различных пакетов для разделения функциональности.
- Разработать компонент для работы с базой данных с использованием интерфейсов и DI.
- Реализовать функциональность для обработки HTTP-запросов с использованием архитектурного подхода MVC.
Directories
¶
cmd
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
internal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Click to show internal directories.
Click to hide internal directories.