go-lesson-multithreading-architecture

module
v0.0.0-...-5edb3c8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 6, 2023 License: GPL-3.0

README

Golang. Введение в многопоточность и архитектуру проектов.

Многопоточность в Go

План:
  • Понятие многопоточности
  • Параллелизм vs. Конкурентность
  • Преимущества и недостатки многопоточности
  • Основные понятия: горутины и планировщик
  • Создание горутин с помощью ключевого слова go
  • Контроль выполнения программы с помощью sync.WaitGroup
  • Понимание конкурентности и порядка выполнения горутин
  • Каналы как механизм обмена данными
  • Основные операции с каналами: отправка и получение данных
  • Блокировка и ожидание данных на каналах
  • Проблемы конкурентного доступа к данным
  • Мьютексы для синхронизации доступа к общим данным
  • Атомарные операции и атомарные типы данных
  • Паттерн "Пул горутин" для ограничения количества одновременно выполняющихся горутин
  • Использование context для управления временем выполнения горутин
Полезные ссылки:
  1. Документация Go: https://golang.org/doc/
  2. Статья "Concurrency in Go": https://golang.org/doc/effective_go.html#concurrency
  3. Презентация "Go Concurrency Patterns": https://talks.golang.org/2012/concurrency.slide
  4. Видео "Advanced Go Concurrency Patterns": https://www.youtube.com/watch?v=QDDwwePbDtw
  5. Контексты Go: https://go.dev/blog/context
  6. Управление go-рутинами с помощью контекстов: https://levelup.gitconnected.com/how-to-use-context-to-manage-your-goroutines-like-a-boss-ef1e478919e6
Практические задания:
  1. Написать программу, которая считает сумму чисел от 1 до N с использованием горутин и каналов.
  2. Создать пул горутин для параллельной загрузки нескольких файлов с интернета.
  3. Реализовать потокобезопасную структуру данных для хранения ключей и значений.

Архитектура проектов на Go

План:
  • Зачем нужна архитектура проекта и как она помогает в разработке программного обеспечения.
  • Обзор различных архитектурных подходов, таких как MVC, CQRS, Clean Architecture и др.
  • Основные принципы архитектуры проектов и их важность для сопровождения и масштабирования проектов.
  • Различные архитектурные подходы и паттерны, используемые в Go.
  • Разделение проекта на модули и пакеты для улучшения организации кода.
  • Использование пакета main и других пакетов для разделения функциональности проекта.
  • Принципы SOLID и их применение для проектирования структуры проекта.
  • Понятие компонентов и их взаимодействие внутри проекта.
  • Управление зависимостями между компонентами с использованием инверсии управления (IoC) и внедрения зависимостей (DI).
  • Применение интерфейсов для уменьшения зависимостей и облегчения тестирования.
  • Применение подходов на практике: выбор подходящей архитектуры для конкретного проекта.
  • Практические советы по реализации архитектурных подходов в Go.
Полезные ссылки:
  1. Статья "Package names": https://blog.golang.org/package-names
  2. Документация по стандартному пакету Go: https://pkg.go.dev/std
  3. Презентация "High Performance Go Workshop": https://dave.cheney.net/high-performance-go-workshop/dotgo-paris.html
  4. База знаний Go: https://go101.org/
  5. Типовая структура проекта Go: https://lets-go-further.alexedwards.net/sample/02.01-project-setup-and-skeleton-structure.html
  6. Генератор бойлерплэйта: https://github.com/gostaticanalysis/skeleton
Практические задания:
  1. Создать базовую структуру проекта на Go с использованием различных пакетов для разделения функциональности.
  2. Разработать компонент для работы с базой данных с использованием интерфейсов и DI.
  3. Реализовать функциональность для обработки HTTP-запросов с использованием архитектурного подхода MVC.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL