11 промтов для Go и Rust: от gRPC-хендлеров до обхода borrow checker в высоконагруженном бэкенде

Введение

Go и Rust сегодня — два главных языка для высоконагруженных бэкенд-сервисов. Go берёт простотой конкурентности (горутины, каналы), Rust — безопасностью памяти без сборщика мусора и предсказуемой производительностью. Но даже опытные разработчики тратят часы на рутинные задачи: написание идемпотентных хендлеров, борьбу с borrow checker, профилирование и оптимизацию аллокаций. AI-ассистенты могут ускорить эти процессы, если правильно формулировать промты.

В этой подборке — 11 готовых промтов для реальных инженерных задач 2026 года. Каждый промт — это конкретный запрос к LLM (например, ChatGPT, Claude или локальной модели), который выдаёт рабочий код или пошаговый план. Мы не привязываемся к конкретному инструменту — промты универсальны. Все примеры проверены на актуальных версиях Go 1.22+ и Rust 1.75+.

1. Генерация идемпотентного gRPC-хендлера на Go

Задача: Написать gRPC-метод, который безопасен при повторных вызовах (идемпотентность). Часто требуется в платежах, заказах, обновлении статусов.

Промт:

Ты — senior Go-разработчик. Напиши идемпотентный gRPC-хендлер для метода UpdateOrderStatus. Вход: order_id, new_status, idempotency_key. Используй PostgreSQL для хранения ключей идемпотентности с TTL 24 часа. При повторном запросе с тем же ключом возвращай предыдущий ответ. Код должен использовать библиотеку google.golang.org/grpc и pgx. Добавь обработку ошибок и логирование.

Пример использования:
Вы пишете сервис заказов. Клиент может отправить запрос дважды из-за сетевого сбоя. Промт сгенерирует функцию, которая проверяет таблицу idempotency_keys, и если ключ уже есть — возвращает сохранённый ответ, иначе выполняет операцию и сохраняет результат.

Результат (сокращённо):

func (s *OrderService) UpdateOrderStatus(ctx context.Context, req *pb.UpdateOrderStatusRequest) (*pb.UpdateOrderStatusResponse, error) {
    tx, err := s.db.Begin(ctx)
    if err != nil { return nil, err }
    defer tx.Rollback(ctx)

    var prevResp pb.UpdateOrderStatusResponse
    err = tx.QueryRow(ctx, "SELECT response FROM idempotency_keys WHERE key=$1 AND expires_at > now()", req.IdempotencyKey).Scan(&prevResp)
    if err == nil {
        return &prevResp, nil
    }
    // ... выполнение обновления и сохранение ответа
}

2. Паттерн Worker Pool на Go с ограничением конкурентности

Задача: Обработать тысячи задач параллельно, не перегружая БД или внешний API. Нужен worker pool с динамическим размером.

Промт:

Напиши на Go worker pool для обработки задач из канала. Количество воркеров задаётся флагом. Каждый воркер делает HTTP-запрос к внешнему API с таймаутом 5 секунд. При ошибке — 3 ретрая с экспоненциальной задержкой. Используй context для отмены. Покажи пример с graceful shutdown.

Пример:
Сервис получает список URL для парсинга. Промт сгенерирует код с sync.WaitGroup, буферизованным каналом задач и обработкой сигналов ОС для корректного завершения.

Совет: Добавьте в промт «используй errgroup из golang.org/x/sync/errgroup» — получите более идиоматичный код.

3. Обход borrow checker в Rust без unsafe

Задача: Компилятор Rust не даёт собрать код из-за одновременного изменяемого и неизменяемого заимствования. Нужно решить без unsafe.

Промт:

У меня ошибка borrow checker: cannot borrow `data` as mutable because it is also borrowed as immutable. Вот код: [вставить код]. Предложи 3 способа исправить без unsafe: 1) через разделение структур, 2) через индексы вместо ссылок, 3) через interior mutability (RefCell, Mutex). Объясни плюсы и минусы каждого.

Пример:
Вы пишете кэш с обновлением. Промт покажет, как заменить хранение ссылок на хранение индексов или использовать Rc<RefCell<>> для разделяемого состояния.

4. Профилирование Go-сервиса через pprof и flamegraph

Задача: Найти узкие места по CPU и памяти. Нужен пошаговый план.

Промт:

Ты — эксперт по производительности Go. Напиши инструкцию: как добавить pprof в HTTP-сервер, снять профили CPU и heap, сгенерировать flamegraph с помощью go-torch или pprof. Какие метрики смотреть в первую очередь? Приведи примеры команд.

Пример:
Сервис тормозит под нагрузкой. Промт выдаст команды:

go tool pprof -http=:8080 http://localhost:6060/debug/pprof/profile?seconds=30

И объяснит, как читать flamegraph: ищите широкие блоки — это функции с высоким self-time.

5. Снижение аллокаций в Rust: замена String на &str

Задача: Уменьшить количество аллокаций в горячем пути. Часто помогает переход на срезы и Cow.

Промт:

Проанализируй функцию на Rust: [вставить код]. Найди все места, где происходят лишние аллокации (String, Vec, clone). Предложи замены на &str, Cow<str>, arrayvec или SmallVec. Покажи diff и объясни, как это повлияет на производительность и время жизни.

Пример:
Функция парсинга JSON создаёт много временных String. Промт предложит использовать serde_json::from_str с заимствованием и &str вместо String.

6. Идемпотентный REST-хендлер на Rust с Actix Web

Задача: Реализовать идемпотентность для POST-запросов в микросервисе на Rust.

Промт:

Напиши на Rust с Actix Web и sqlx идемпотентный POST-хендлер для создания платежа. Используй заголовок Idempotency-Key. Храни ключи в PostgreSQL с TTL. При повторном запросе возвращай тот же ответ. Добавь валидацию и обработку ошибок.

Пример:
Аналогично Go-версии, но с учётом асинхронности Tokio и типов sqlx.

7. Асинхронный пайплайн на Tokio с ограничением параллелизма

Задача: Обработать поток данных с ограничением количества одновременных задач.

Промт:

Напиши на Rust асинхронный пайплайн: читаем строки из файла, для каждой делаем HTTP-запрос, но не более 10 одновременно. Используй tokio, futures::stream, buffer_unordered. Добавь обработку ошибок и логирование.

Пример:
Промт сгенерирует код с stream::iter(...).map(...).buffer_unordered(10).collect::<Vec<_>>().await.

8. Graceful shutdown для Go-сервиса с горутинами

Задача: Корректно завершить работу, дождавшись завершения текущих запросов.

Промт:

Напиши на Go graceful shutdown для HTTP-сервера и фоновых воркеров. Используй context и signal.Notify. При получении SIGINT/SIGTERM сервер перестаёт принимать новые запросы, ждёт завершения активных (таймаут 30 секунд), затем останавливает воркеры.

Пример:
Код с srv.Shutdown(ctx) и wg.Wait().

9. Оптимизация latency в Rust: замена Mutex на RwLock или lock-free

Задача: Снизить contention на блокировках в многопоточном сервисе.

Промт:

Проанализируй код на Rust: [вставить]. Есть ли contention на Mutex? Предложи замену на RwLock, DashMap или lock-free структуры (crossbeam). Покажи, как изменится код и какие подводные камни.

Пример:
Если большая часть операций — чтение, RwLock даст прирост. Промт покажет замену.

10. Генерация тестов на конкурентность в Go (race detector)

Задача: Написать тесты, которые выявляют гонки данных.

Промт:

Напиши тесты на Go для функции [название], которая использует горутины и общий доступ к map. Тесты должны запускаться с флагом -race и проверять отсутствие гонок. Используй sync.WaitGroup и каналы.

Пример:
Промт создаст тест, который параллельно вызывает функцию и проверяет результат. Запуск: go test -race.

11. Рефакторинг Rust-кода с использованием трейтов и обобщений

Задача: Убрать дублирование, сделать код расширяемым.

Промт:

Отрефактори Rust-код: [вставить]. Выдели общий трейт для работы с разными типами хранилищ (Postgres, Redis). Используй async-trait. Покажи до и после.

Пример:
Промт предложит трейт Storage с методами get, set, и реализации для каждого бэкенда.

Заключение

Эти 11 промтов покрывают ключевые сценарии работы с Go и Rust в высоконагруженных системах: от идемпотентности и конкурентности до профилирования и безопасной работы с памятью. Используйте их как основу, адаптируя под свой контекст. Помните: AI-ассистент — это инструмент, который ускоряет рутину, но архитектурные решения и финальный код всегда остаются за вами. Экспериментируйте, комбинируйте промты и делитесь своими находками в комментариях.

Полезные ссылки:
- Официальная документация Go: https://go.dev/doc/
- Rust Book: https://doc.rust-lang.org/book/
- Tokio: https://tokio.rs/
- pprof: https://github.com/google/pprof

← Все статьи

Комментарии

Читайте также

ChatGPT и Python для алгоритмов: 12 промтов, которые заменят репетитора по структурам данных

7 октября 2026

Как ускорить PostgreSQL и MongoDB в 10 раз: 12 промтов для оптимизации запросов и индексов без администратора БД

7 октября 2026

12 промтов, которые превращают LLM в дежурного DBA: PostgreSQL, MongoDB и Redis под нагрузкой

7 октября 2026

Облачные нативные технологии — микросервисы, Kubernetes и облачные технологии: ваш путь к современной инфраструктуре

7 октября 2026

Real-time системы (WebSockets, WebRTC): как перестать тормозить и начать жить в реальном времени

7 октября 2026

Инженер по AI-тестированию: как автоматизация тестирования на основе ИИ решает проблему нестабильных тестов и самовосстанавливающихся сбоев

7 октября 2026

11 промтов для Python-разработчика: тренируем LeetCode, структуры данных и System Design без выгорания

7 октября 2026

Embedded Systems AI: 12 промтов, которые превращают ChatGPT в напарника по пайке, датчикам и MQTT

6 октября 2026

ChatGPT в Excel и вокруг 1С: 11 промтов для бухгалтера, которые ускоряют закрытие месяца и сверку актов

6 октября 2026