https://github.com/alex6712/learning-golang
Мой путь изучения Golang: от Python Backend Developer к Golang Backend Developer.
https://github.com/alex6712/learning-golang
docker docker-compose education gin go golang grpc kafka microservices web-application
Last synced: 3 months ago
JSON representation
Мой путь изучения Golang: от Python Backend Developer к Golang Backend Developer.
- Host: GitHub
- URL: https://github.com/alex6712/learning-golang
- Owner: alex6712
- License: mit
- Created: 2025-05-19T19:12:51.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2025-05-29T19:20:07.000Z (10 months ago)
- Last Synced: 2025-05-29T20:35:51.703Z (10 months ago)
- Topics: docker, docker-compose, education, gin, go, golang, grpc, kafka, microservices, web-application
- Language: Go
- Homepage:
- Size: 13.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Learning Golang
Здесь я изучаю веб-программирование на Golang
Мой путь изучения нового языка программирования, его веб-фреймворков и использования уже знакомых мне инструментов в его контексте.
## Почему Go?
Я программирую на **Python** в сфере _backend_-разработки уже долгое время: с начала моего обучения в университете в 2020 году. Начиная с **монолитных** систем, я постепенно изучал различные подходы к _проектированию веб-приложений_, и на текущий момент уже как несколько лет использую **микросервисную** и **гибридную** архитектуры в своих проектах.
Одним из ключевых преимуществ **микросервисной** (и, как следствие, **гибридной**) архитектуры является её _"отвязка"_ от **стека**. Каждый из сервисов является **изолированным**: крутится в своём контейнере и содержит свои зависимости. Это позволяет писать хоть каждый микросервис на новом языке программирования.
**Python** - очень многофункциональный язык программирования, который замечательно мне подходит, однако в некоторых задачах, он явно будет не лучшим выбором. И поэтому я решил изучить новый ЯП в контексте _веб-программирования_, чтобы расширить свой **стек** и иметь дополнительный **инструмент** в своём арсенале для решения _специальных_, _таргетных_ задач.
**Go** я выбрал, т.к. именно этот язык полностью отвечает следующим пунктам, которые я выделил как главные:
- **_Высокая скорость работы_** - **Go** очень быстрый язык программирования. В большинстве бенчмарков он находится между **C/C++** и **Java** (например, в [этом](https://github.com/jabbalaci/SpeedTests)). И хотя бенчмарки редко отражают реальные сценарии эксплуатации, отрицать высочайшую скорость и отзывчивость **Go** не стоит;
- **_Удобная конкурентность_** - встроенные инструменты языка ([**goroutines**](https://go.dev/tour/concurrency/1), [**channels**](https://go.dev/tour/concurrency/2)) позволяют легко работать с асинхронностью, что сегодня просто необходимо в веб-разработке с её упором на **I/O bound**;
- **_Простота в использовании_** - **Golang** сравнительно молодой язык программирования, который изначально создавался с [целью](https://go.dev/talks/2009/go_talk-20091030.pdf) упрощения разработки крупных систем: у него приятный синтаксис, немного ключевых слов, эффективная система пакетов, быстрая компиляция и множество других преимуществ;
- **_Ориентированность на веб_** - язык **Go** создавался для веба, и он живёт в вебе. **Kubernetes**, **Docker**, **gRPC**, _микросервисы_, _облачные приложения_ - это всё про **Golang**.
## Конечная цель
Т.к. я собираюсь использовать **Go** в качестве инструмента создания микросервисов, основной целью этого репозитория я вижу развитие простого _консольного приложения_ в _веб-приложение_, реализующее основные паттерны этой области.
Тема веб-приложения: сервис, позволяющий создавать заметки, TODO list.
### 1. RESTful API
API с использованием принципов REST, предоставляющее базовые для веб-приложения операции.
- Регистрация, аутентификация, авторизация на основе JWT;
- Создание, просмотр, изменение и удаление заметок в личном кабинете.
Изучение подходов к проектированию сервисов на **Golang**, интеграция **best practices** этой области.
Основные технологии и инструменты: **Fiber**, **database/sql**, **sqlx**.
### 2. Межсервисное взаимодействие
Установка интерфейса общения сервисов с использованием двух подходов: _gRPC_ и _асинхронные брокеры сообщений_. Исследование контекста работы подобных инструментов с **Golang**.
Основные технологии и инструменты: **gRPC**, **Protobuf**, **Kafka**.
### 3. Развёртка приложения на удалённом сервере
Развёртка веб-приложения на удалённом сервере с помощью **систем контейнеризации** и средств **CI/CD**. Настройка веб-сервера, проксирование, администрирование сервера. Применение _практик DevOps_ в контексте работы с **Golang**.
Основные технологии и инструменты: **GitHub Actions**, **Linux**, **Docker (docker-compose)**, **nginx**.
## Лицензия
Данный проект находится под лицензией [MIT License/X11 License](https://github.com/alex6712/learning-rust/blob/master/LICENSE).
## Автор
Ванюков Алексей Игоревич, НГТУ, ИРИТ, группа 21-ИС, 2025 год.
Контакты:
- Telegram: [@ecuripusu](https://t.me/ecuripusu)
- ВКонтакте: [Ванюков Алексей](https://vk.com/zerolevelmath)
- Адрес электронной почты: alexeivanyukov@yandex.ru