An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          



Learning Golang



Здесь я изучаю веб-программирование на Golang


GitHub Last Commit

Мой путь изучения нового языка программирования, его веб-фреймворков и использования уже знакомых мне инструментов в его контексте.

## Почему 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