Расскажите о вашем опыте работы с фреймворками и ключевыми библиотеками в Go.

Ответ

В своей работе я использовал несколько ключевых фреймворков и библиотек, выбирая их в зависимости от конкретных задач проекта:

  • Веб-фреймворки:

    • Gin: Легковесный и очень производительный, идеально подходит для создания REST API, где важна скорость ответа.
    • Echo: Предлагает хороший баланс между производительностью и набором встроенных middleware «из коробки», что ускоряет разработку.
  • Межсервисное взаимодействие:

    • gRPC: Основной выбор для построения высокоэффективного RPC-взаимодействия в микросервисной архитектуре, особенно когда важна строгая типизация контрактов.
  • Работа с базами данных:

    • sqlx: Расширение над стандартным database/sql, которое упрощает работу с SQL, позволяя маппить результаты запросов в структуры без необходимости писать много шаблонного кода.
  • Тестирование:

    • Testify: Основной инструмент для написания тестов благодаря удобным assertions (assert, require) и возможностям мокирования (mock).

Пример простого эндпоинта на 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 приходит и как будто говорит: «Расслабься, чувак, я всё сам в структуры замаплю». И правда, жить стало проще.
  • Тесты, мать их:

    • 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
}

И главный мой принцип, который я вынес, блядь, через боль и страдания: не надо фанатеть от одной технологии, как полупидор. Бери то, что реально подходит для задачи, а не то, что модно или на хабре прочитал. Иначе получится — инструмент охуенный, а задача решена через жопу.