12 промтов для Go: микросервисы, API, CLI-утилиты

Введение

Go (Golang) — один из самых быстрорастущих языков для бэкенда и инфраструктурных инструментов. Его компилируемость, встроенная горутинная модель и минималистичный синтаксис делают его идеальным для микросервисов и CLI. Но даже опытные разработчики тратят часы на рутинные задачи: генерацию кода, написание тестов, рефакторинг. Я собрал 12 проверенных промтов, которые реально ускоряют работу — от проектирования REST API до отладки горутин. Каждый промт сопровождается примером и кодом.

1. Генерация скелета HTTP-сервера

Промт: «Напиши Go-сервер с маршрутизацией на chi/v5, middleware для логирования и CORS, обработчики для /health и /api/v1/users. Используй стандартный net/http». Пример: после выполнения получаешь готовый main.go с настройкой маршрутов, логгером и структурой ответа. Код:

package main

import (
    "github.com/go-chi/chi/v5"
    "github.com/go-chi/chi/v5/middleware"
    "net/http"
)

func main() {
    r := chi.NewRouter()
    r.Use(middleware.Logger)
    r.Use(middleware.CORS)
    r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("OK"))
    })
    r.Route("/api/v1/users", func(r chi.Router) {
        r.Get("/", listUsers)
        r.Post("/", createUser)
    })
    http.ListenAndServe(":8080", r)
}

2. Генерация тестов с моками

Промт: «Напиши unit-тест для функции getUserByID(id int) (*User, error) с использованием testify/mock. Создай mock для интерфейса UserRepository». Пример: AI создает файл user_test.go с тестовыми случаями (success, not found, db error). Код:

func TestGetUserByID(t *testing.T) {
    mockRepo := new(MockUserRepository)
    mockRepo.On("FindByID", 1).Return(&User{ID: 1, Name: "Alice"}, nil)
    service := NewUserService(mockRepo)
    user, err := service.GetUserByID(1)
    assert.NoError(t, err)
    assert.Equal(t, "Alice", user.Name)
}

3. Рефакторинг legacy-функции

Промт: «Рефактори эту функцию: разбей на мелкие функции, добавь error handling, используй контекст для таймаута. Исходный код: func process(data []byte) ([]byte, error) { … }». Пример: AI выделяет этапы валидации, трансформации и сохранения, оборачивает в контекст с дедлайном.

4. Оптимизация горутин с паттерном worker pool

Промт: «Реализуй worker pool для обработки 1000 задач через каналы. Число воркеров — 5. Каждая задача — функция, которая спит 100ms». Пример: код с sync.WaitGroup, буферизированным каналом и graceful shutdown. Код:

func main() {
    jobs := make(chan int, 100)
    var wg sync.WaitGroup
    for w := 1; w <= 5; w++ {
        wg.Add(1)
        go worker(w, jobs, &wg)
    }
    for j := 1; j <= 1000; j++ {
        jobs <- j
    }
    close(jobs)
    wg.Wait()
}

5. Генерация CLI-утилиты с cobra

Промт: «Создай CLI-приложение с cobra: команды init, run, stop. Каждая команда печатает своё название и имеет флаг --verbose». Пример: AI генерирует root.go, init.go, run.go, stop.go с настройкой флагов и подкоманд.

6. Написание middleware для авторизации

Промт: «Напиши middleware для JWT-аутентификации на Go. Проверяй токен из заголовка Authorization, извлекай userID и клади в контекст». Пример: код с использованием jose2go или golang-jwt.

7. Документирование API с swagger

Промт: «Сгенерируй swagger-аннотации для REST-эндпоинтов /users. Используй github.com/swaggo/swag. Опиши модель User». Пример: AI добавляет комментарии к контроллеру и модели.

8. Парсинг конфигурации из YAML

Промт: «Напиши функцию, которая читает config.yaml и заполняет структуру Config с полями Port, Database (Host, Port, User)». Пример: код с viper или gopkg.in/yaml.v3.

9. Graceful shutdown HTTP-сервера

Промт: «Реализуй graceful shutdown для HTTP-сервера: обработка SIGINT и SIGTERM, завершение активных запросов за 30 секунд». Пример: код с signal.Notify и Shutdown.

10. Миграция базы данных

Промт: «Напиши скрипт миграции для PostgreSQL: создание таблицы users с полями id, name, email, created_at. Используй golang-migrate». Пример: SQL-файл и Go-код для запуска.

11. Логирование с zerolog

Промт: «Настрой структурированное логирование с zerolog: вывод в JSON, уровень info, поля app и version». Пример: код с инициализацией логгера.

12. Отладка deadlock'ов

Промт: «Найди deadlock в этом коде с горутинами и мьютексами и исправь. Код: …». Пример: AI выявляет проблему порядка блокировок и предлагает решение с sync.Mutex.

Заключение

Эти 12 промтов покрывают 80% рутинных задач в Go-разработке. Они экономят часы на написание шаблонного кода, тестов и документации. Попробуйте их в своём проекте — и вы увидите, как AI превращается из игрушки в инструмент продакшн-уровня. Совет: адаптируйте промты под свои библиотеки и версии Go. Хорошего кода!

← Все статьи

Комментарии