Go и Rust давно перестали быть просто языками — это два столпа современного бэкенда. Go берёт простотой и лёгкой конкурентностью, Rust — безопасностью памяти и скоростью без сборщика мусора. Но даже опытные разработчики тратят часы на отладку deadlock'ов, борьбу с borrow checker'ом или тюнинг gRPC-стримов. AI-ассистенты вроде ChatGPT, Claude или локальных моделей могут стать вашим вторым пилотом — если знать, как их правильно просить.
Эта подборка — не абстрактные советы, а 15 готовых промтов, проверенных в реальных проектах. Каждый промт сопровождается пояснением, для какой задачи он подходит, и примером использования. Вы можете копировать их как есть и адаптировать под свой стек. Мы опирались на официальную документацию Go (go.dev), Rust (doc.rust-lang.org), спецификации gRPC (grpc.io) и RFC 9113 (HTTP/2), чтобы примеры были технически корректными.
Промт 1: Генерация идиоматичного кода с горутинами и каналами
Задача: Быстро получить рабочий шаблон для конкурентной обработки задач без гонок и утечек горутин.
Промт:
"Ты — эксперт по Go. Напиши идиоматичный пример пула воркеров, который обрабатывает задачи из канала, поддерживает контекст отмены и корректно завершается. Используй sync.WaitGroup, context.Context и небуферизованный канал для сбора результатов. Добавь комментарии, объясняющие каждое решение. Учти возможные утечки горутин и покажи, как их избежать."
Пример использования: Вы пишете сервис для обработки изображений. Нужно распараллелить загрузку и ресайз. AI сгенерирует скелет с worker pool, где каждый воркер слушает jobs <-chan Job, а отмена приходит через ctx.Done(). Вы сразу получаете код, который не оставит висящих горутин после завершения.
Промт 2: Отладка deadlock в Go
Задача: Найти причину взаимной блокировки в конкурентном коде.
Промт:
"Ты — senior Go-разработчик. У меня deadlock в приложении. Вот фрагмент кода: [вставьте код]. Проанализируй, где может возникнуть циклическая зависимость горутин, и объясни, как её устранить. Предложи два варианта: минимальное исправление и рефакторинг с использованием select и таймаутов."
Пример использования: Классический случай — две горутины ждут данные друг от друга. AI часто находит проблему в небуферизованных каналах или в отсутствии default в select. Вы получаете не только фикс, но и понимание, почему это произошло.
Промт 3: Генерация gRPC-сервиса на Go с interceptors
Задача: Создать gRPC-сервер с логированием, аутентификацией и восстановлением после паник.
Промт:
"Сгенерируй на Go gRPC-сервер с unary- и stream-интерсепторами для логирования, проверки JWT и восстановления после panic. Используй grpc.UnaryInterceptor и grpc.StreamInterceptor. Покажи, как зарегистрировать сервис и запустить сервер на порту 50051. Добавь пример .proto файла с одним унарным и одним стриминговым методом."
Пример использования: Вы пишете микросервис для аутентификации. AI выдаст готовый шаблон с интерсепторами, которые можно сразу вставить в проект. Останется только дописать бизнес-логику.
Промт 4: Оптимизация аллокаций в Rust
Задача: Уменьшить количество аллокаций в горячем пути.
Промт:
"Ты — Rust-эксперт по производительности. Проанализируй этот код: [вставьте код]. Найди места, где происходят лишние аллокации в куче, и предложи замену на стековые структуры, SmallVec или повторное использование буферов. Объясни, как это повлияет на производительность и безопасность памяти."
Пример использования: Парсер JSON на Rust, который создаёт String для каждого поля. AI предложит использовать &str и serde с zero-copy, что снизит нагрузку на аллокатор.
Промт 5: Дружелюбный к borrow checker рефакторинг
Задача: Переписать код, который не компилируется из-за заимствований.
Промт:
"Помоги переписать этот Rust-код, чтобы он удовлетворял borrow checker: [вставьте код с ошибкой]. Предложи варианты с использованием Rc<RefCell<>>, Arc<Mutex<>> или изменением владения. Объясни, почему возникает ошибка и как каждый вариант её решает."
Пример использования: Вы пытаетесь изменить вектор во время итерации по нему. AI покажет, как использовать индексы или iter_mut() вместо прямого изменения.
Промт 6: Zero-copy парсинг в Rust
Задача: Написать парсер бинарного протокола без копирования данных.
Промт:
"Напиши на Rust zero-copy парсер для формата [опишите формат, например, простой TLV]. Используй крейт nom или bytes. Покажи, как возвращать срезы исходного буфера вместо аллокации новых строк. Добавь обработку ошибок через Result."
Пример использования: Парсинг сетевых пакетов. AI сгенерирует функцию, которая принимает &[u8] и возвращает структуру с заимствованными полями, минимизируя копирование.
Промт 7: Настройка gRPC-стриминга между Go и Rust
Задача: Организовать двунаправленный стриминг между сервисами на разных языках.
Промт:
"Покажи, как настроить gRPC bidirectional streaming между сервером на Go и клиентом на Rust. Опиши .proto файл, генерацию кода через protoc, и приведи примеры отправки и приёма сообщений с обеих сторон. Учти обработку ошибок и закрытие стрима."
Пример использования: Микросервис на Go шлёт телеметрию, Rust-клиент её обрабатывает. AI даст полный код с tonic для Rust и grpc-go для Go.
Промт 8: Безопасная работа с памятью в Rust: аудит unsafe-блоков
Задача: Проверить unsafe-код на корректность.
Промт:
"Проанализируй этот unsafe-блок на Rust: [вставьте код]. Проверь, соблюдены ли инварианты безопасности: выравнивание, время жизни, отсутствие гонок. Предложи, как переписать без unsafe, если возможно. Если нет — объясни, какие гарантии нужно добавить."
Пример использования: Вы используете unsafe для работы с сырыми указателями. AI укажет на потенциальные UB и предложит обернуть в безопасную абстракцию.
Промт 9: Оптимизация конкурентности в Go: sync.Pool и атомики
Задача: Снизить нагрузку на GC за счёт переиспользования объектов.
Промт:
"Покажи, как использовать sync.Pool для переиспользования буферов в высоконагруженном Go-сервисе. Приведи пример с байтовыми срезами и объясни, когда это даёт выигрыш. Сравни с atomic.Value для конфигураций."
Пример использования: HTTP-сервер, который часто создаёт временные буферы. AI покажет, как заменить make([]byte, 1024) на pool.Get().(*[]byte).
Промт 10: Обработка ошибок в Rust: thiserror и anyhow
Задача: Унифицировать обработку ошибок в большом проекте.
Промт:
"Напиши пример обработки ошибок в Rust с использованием thiserror для библиотеки и anyhow для приложения. Покажи, как создавать кастомные ошибки, конвертировать их и добавлять контекст. Сравни с подходом на Go (errors.Is, errors.As)."
Пример использования: Вам нужно пробрасывать ошибки из разных модулей. AI сгенерирует enum с thiserror и функцию main, которая использует anyhow::Result.
Промт 11: Генерация тестов для конкурентного кода на Go
Задача: Написать тесты, которые ловят гонки.
Промт:
"Сгенерируй тесты на Go для функции, которая использует горутины и каналы: [вставьте функцию]. Используй флаг -race, добавь таймауты и проверку на утечки горутин через runtime.NumGoroutine. Покажи, как запускать тесты в CI."
Пример использования: Вы хотите убедиться, что ваш worker pool не течёт. AI напишет тест, который запускает 1000 задач и проверяет, что после завершения число горутин вернулось к исходному.
Промт 12: Профилирование и оптимизация gRPC на Go
Задача: Найти узкие места в gRPC-сервисе.
Промт:
"Опиши, как профилировать gRPC-сервер на Go с помощью pprof. Какие метрики смотреть в первую очередь? Как интерпретировать flamegraph? Приведи пример кода для включения профилирования и анализа."
Пример использования: Ваш сервис тормозит под нагрузкой. AI подскажет, как добавить net/http/pprof и снять профиль CPU, чтобы найти горячие функции.
Промт 13: Безопасная работа с памятью в Rust: аудит unsafe-блоков
Задача: Проверить unsafe-код на корректность.
Промт:
"Проанализируй этот unsafe-блок на Rust: [вставьте код]. Проверь, соблюдены ли инварианты безопасности: выравнивание, время жизни, отсутствие гонок. Предложи, как переписать без unsafe, если возможно. Если нет — объясни, какие гарантии нужно добавить."
Пример использования: Вы используете unsafe для работы с сырыми указателями. AI укажет на потенциальные UB и предложит обернуть в безопасную абстракцию.
Промт 14: Оптимизация конкурентности в Go: sync.Pool и атомики
Задача: Снизить нагрузку на GC за счёт переиспользования объектов.
Промт:
"Покажи, как использовать sync.Pool для переиспользования буферов в высоконагруженном Go-сервисе. Приведи пример с байтовыми срезами и объясни, когда это даёт выигрыш. Сравни с atomic.Value для конфигураций."
Пример использования: HTTP-сервер, который часто создаёт временные буферы. AI покажет, как заменить make([]byte, 1024) на pool.Get().(*[]byte).
Промт 15: Обработка ошибок в Rust: thiserror и anyhow
Задача: Унифицировать обработку ошибок в большом проекте.
Промт:
"Напиши пример обработки ошибок в Rust с использованием thiserror для библиотеки и anyhow для приложения. Покажи, как создавать кастомные ошибки, конвертировать их и добавлять контекст. Сравни с подходом на Go (errors.Is, errors.As)."
Пример использования: Вам нужно пробрасывать ошибки из разных модулей. AI сгенерирует enum с thiserror и функцию main, которая использует anyhow::Result.
Все эти промты — не догма, а отправная точка. Экспериментируйте, добавляйте контекст своего проекта, и AI станет незаменимым помощником в разработке на Go и Rust. Главное — всегда проверяйте сгенерированный код, особенно в областях безопасности памяти и конкурентности. Удачи в написании быстрых и надёжных бэкендов!
Комментарии