Go встречает ИИ: почему это важно для разработчика
Мир разработки изменился. Если раньше мы писали код вручную и тратили часы на поиск багов, то сегодня нейросети берут на себя рутину. Но как это работает на практике? Можно ли объединить мощь Go и ChatGPT в одном проекте? Ответ — да, и это проще, чем кажется.
Golang — язык, созданный для производительности и параллелизма. А ChatGPT — модель, способная генерировать текст, отвечать на вопросы и даже писать код. Вместе они образуют тандем, который может автоматизировать документацию, генерировать тесты, анализировать ошибки и многое другое. В этой статье мы разберем, как использовать ChatGPT в разработке на Go с реальными примерами кода.
С чего начать: настройка окружения для работы с OpenAI API
Прежде чем писать код, нужно получить доступ к API OpenAI. Это стандартный REST-интерфейс, который легко вызывать из любого языка, включая Go.
Шаг 1. Получаем API-ключ
Зарегистрируйтесь на platform.openai.com, создайте новый секретный ключ в разделе API Keys. Сохраните его — он понадобится для всех запросов.
Шаг 2. Создаем базовую структуру проекта на Go
Создайте новый модуль и установите зависимости:
mkdir go-chatgpt
cd go-chatgpt
go mod init go-chatgpt
Нам понадобится HTTP-клиент. Можно использовать стандартный net/http, но для удобства добавим библиотеку для работы с JSON:
go get github.com/go-resty/resty/v2
Пишем первый запрос к ChatGPT на Go
Самый простой способ интегрировать ChatGPT — отправить POST-запрос к эндпоинту https://api.openai.com/v1/chat/completions. Рассмотрим пример, где мы просим модель объяснить, что такое горутина в Go.
Пример 1: простой запрос к модели
package main
import (
"encoding/json"
"fmt"
"os"
"github.com/go-resty/resty/v2"
)
type Message struct {
Role string `json:"role"`
Content string `json:"content"`
}
type Request struct {
Model string `json:"model"`
Messages []Message `json:"messages"`
}
type Response struct {
Choices []struct {
Message Message `json:"message"`
} `json:"choices"`
}
func main() {
apiKey := os.Getenv("OPENAI_API_KEY")
if apiKey == "" {
fmt.Println("Ошибка: установите переменную OPENAI_API_KEY")
return
}
client := resty.New()
req := Request{
Model: "gpt-3.5-turbo",
Messages: []Message{
{Role: "user", Content: "Объясни, что такое горутина в Go простыми словами"},
},
}
reqBody, _ := json.Marshal(req)
var resp Response
_, err := client.R().
SetHeader("Authorization", "Bearer "+apiKey).
SetHeader("Content-Type", "application/json").
SetBody(string(reqBody)).
SetResult(&resp).
Post("https://api.openai.com/v1/chat/completions")
if err != nil {
fmt.Println("Ошибка запроса:", err)
return
}
if len(resp.Choices) > 0 {
fmt.Println("Ответ ChatGPT:")
fmt.Println(resp.Choices[0].Message.Content)
}
}
Запустите скрипт:
export OPENAI_API_KEY="sk-ваш_ключ"
go run main.go
Вы получите развернутый ответ от нейросети. Это основа, на которой строится любая интеграция ChatGPT с Go.
Продвинутые сценарии: создаем ИИ-ассистента для разработчика
Просто отправлять запросы — скучно. Давайте сделаем что-то полезное: напишем ассистента, который принимает на вход код на Go и возвращает его оптимизированную версию с комментариями.
Пример 2: ИИ-ревьюер кода на Golang
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
"strings"
"github.com/go-resty/resty/v2"
)
type ChatRequest struct {
Model string `json:"model"`
Messages []Message `json:"messages"`
MaxTokens int `json:"max_tokens"`
}
type ChatResponse struct {
Choices []struct {
Message Message `json:"message"`
} `json:"choices"`
}
func askChatGPT(apiKey, prompt string) (string, error) {
client := resty.New()
req := ChatRequest{
Model: "gpt-3.5-turbo",
Messages: []Message{
{Role: "system", Content: "Ты опытный Go-разработчик. Анализируй код и предлагай улучшения."},
{Role: "user", Content: prompt},
},
MaxTokens: 1000,
}
reqBody, _ := json.Marshal(req)
var resp ChatResponse
_, err := client.R().
SetHeader("Authorization", "Bearer "+apiKey).
SetHeader("Content-Type", "application/json").
SetBody(string(reqBody)).
SetResult(&resp).
Post("https://api.openai.com/v1/chat/completions")
if err != nil {
return "", err
}
if len(resp.Choices) > 0 {
return resp.Choices[0].Message.Content, nil
}
return "", fmt.Errorf("пустой ответ от API")
}
func main() {
apiKey := os.Getenv("OPENAI_API_KEY")
if apiKey == "" {
fmt.Println("Укажите API-ключ через переменную OPENAI_API_KEY")
return
}
fmt.Println("Введите код на Go (для завершения введите END):")
scanner := bufio.NewScanner(os.Stdin)
var codeLines []string
for scanner.Scan() {
line := scanner.Text()
if line == "END" {
break
}
codeLines = append(codeLines, line)
}
code := strings.Join(codeLines, "\n")
prompt := fmt.Sprintf("Проверь этот код на Go и предложи улучшения:\n\n```go\n%s\n```", code)
answer, err := askChatGPT(apiKey, prompt)
if err != nil {
fmt.Println("Ошибка:", err)
return
}
fmt.Println("\nРекомендации от ИИ-ассистента:")
fmt.Println(answer)
}
Этот инструмент можно использовать как часть CI/CD пайплайна. Представьте: вы пушите код, а Go и ChatGPT автоматически проверяют его на соответствие best practices. Удобно, правда?
Практические кейсы: где пригодится связка Go и нейросетей
Мы разобрали базовую интеграцию. Теперь давайте посмотрим, какие реальные задачи решает разработка на Go с ChatGPT:
- Генерация unit-тестов — передайте функции, и нейросеть напишет тесты с моками.
- Автоматическая документация — ChatGPT превратит ваш код в красивую документацию с примерами.
- Поиск уязвимостей — модель может найти потенциальные проблемы безопасности в коде.
- Перевод кода — конвертируйте Python в Go или наоборот за секунды.