Ответ
В своей работе я использовал несколько ключевых фреймворков и библиотек, выбирая их в зависимости от конкретных задач проекта:
-
Веб-фреймворки:
- Gin: Легковесный и очень производительный, идеально подходит для создания REST API, где важна скорость ответа.
- Echo: Предлагает хороший баланс между производительностью и набором встроенных middleware «из коробки», что ускоряет разработку.
-
Межсервисное взаимодействие:
- gRPC: Основной выбор для построения высокоэффективного RPC-взаимодействия в микросервисной архитектуре, особенно когда важна строгая типизация контрактов.
-
Работа с базами данных:
- sqlx: Расширение над стандартным
database/sql, которое упрощает работу с SQL, позволяя маппить результаты запросов в структуры без необходимости писать много шаблонного кода.
- sqlx: Расширение над стандартным
-
Тестирование:
- Testify: Основной инструмент для написания тестов благодаря удобным assertions (
assert,require) и возможностям мокирования (mock).
- Testify: Основной инструмент для написания тестов благодаря удобным assertions (
Пример простого эндпоинта на Gin:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "pong"})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
Ключевым принципом для меня является выбор инструмента, наиболее подходящего для решения конкретной бизнес-задачи, а не слепое следование одному фреймворку.
Ответ 18+ 🔞
Слушай, вот сижу я тут, вспоминаю, как эти фреймворки выбирал, аж смешно. Ну как смешно... скорее, пиздец как намучился, пока понял, что к чему. Но в итоге-то разобрался, блядь!
В общем, смотри, у меня там целый зоопарк инструментов был, под каждую задачу — своя мартышлюшка.
-
Веб-фреймворки, блядь:
- Gin: Ну это вообще огонь, ёпта. Такой лёгкий, шустрый, прям как хуй с горы — летит и не тормозит. Идеален, когда надо API наколбасить, чтобы отклик был быстрее, чем мысль «да похуй».
- Echo: А вот это уже не хуй с горы, а более сбалансированная штука. Там уже из коробки всяких middleware овердохуища, чтобы не писать одно и то же по сто раз. Для скорости разработки — то, что надо, блядь.
-
Чтоб сервисы друг с другом болтали:
- gRPC: Во, это серьёзно, ёпта. Когда у тебя там микросервисов, как собак нерезаных, и им надо строго, по-взрослому, данные передавать — это наш выбор. Всё чётко, по контракту, никакого «ой, а я думал, тут строка».
-
С базами данных возиться:
- sqlx: Ну стандартный
database/sql— это, конечно, круто, но писать тонны однообразного кода — терпения ноль, ебать. А sqlx приходит и как будто говорит: «Расслабься, чувак, я всё сам в структуры замаплю». И правда, жить стало проще.
- sqlx: Ну стандартный
-
Тесты, мать их:
- Testify: Без этого вообще никуда. Писать тесты — та ещё работёнка, но с ним хоть не так тошно. Assertions удобные, мокировать можно — красота, блядь. Хули ещё надо?
Вот, смотри, простейший эндпоинт на этом самом Gin, чтоб ты понимал масштаб:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "pong"})
})
r.Run() // слушаем на 0.0.0.0:8080
}
И главный мой принцип, который я вынес, блядь, через боль и страдания: не надо фанатеть от одной технологии, как полупидор. Бери то, что реально подходит для задачи, а не то, что модно или на хабре прочитал. Иначе получится — инструмент охуенный, а задача решена через жопу.