Go SDK
Используйте популярный go-openai SDK с GonkaGate. Полная совместимость с OpenAI API.
Сообщество SDK
Мы рекомендуем использовать sashabaranov/go-openai SDK — самый популярный Go-клиент для OpenAI-совместимых API.
github.com/sashabaranov/go-openaiУстановка
Установите go-openai SDK с помощью go get:
terminal
go get github.com/sashabaranov/go-openaiНастройка
Настройте клиент для использования API GonkaGate:
config.go
package main
import (
"github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("gp-your-api-key")
config.BaseURL = "https://api.gonkagate.com/v1"
client := openai.NewClientWithConfig(config)
}Базовое использование
Выполните первый запрос к чату:
basic_usage.go
package main
import (
"context"
"fmt"
"log"
"github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("gp-your-api-key")
config.BaseURL = "https://api.gonkagate.com/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleSystem,
Content: "You are a helpful assistant.",
},
{
Role: openai.ChatMessageRoleUser,
Content: "Hello, how are you?",
},
},
Temperature: 0.7,
MaxTokens: 1000,
},
)
if err != nil {
log.Fatalf("ChatCompletion error: %v", err)
}
fmt.Println(resp.Choices[0].Message.Content)
}Потоковая передача
Потоковые ответы для вывода в реальном времени:
streaming.go
package main
import (
"context"
"errors"
"fmt"
"io"
"log"
"github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("gp-your-api-key")
config.BaseURL = "https://api.gonkagate.com/v1"
client := openai.NewClientWithConfig(config)
stream, err := client.CreateChatCompletionStream(
context.Background(),
openai.ChatCompletionRequest{
Model: "Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: "Write a poem about AI",
},
},
Stream: true,
},
)
if err != nil {
log.Fatalf("CreateChatCompletionStream error: %v", err)
}
defer stream.Close()
for {
response, err := stream.Recv()
if errors.Is(err, io.EOF) {
fmt.Println("\nStream finished")
return
}
if err != nil {
log.Fatalf("Stream error: %v", err)
}
fmt.Print(response.Choices[0].Delta.Content)
}
}Обработка ошибок
Корректно обрабатывайте типичные ошибки API:
error_handling.go
package main
import (
"context"
"errors"
"fmt"
"log"
"net/http"
"github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("gp-your-api-key")
config.BaseURL = "https://api.gonkagate.com/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
Messages: []openai.ChatCompletionMessage{
{Role: openai.ChatMessageRoleUser, Content: "Hello!"},
},
},
)
if err != nil {
var apiErr *openai.APIError
if errors.As(err, &apiErr) {
switch apiErr.HTTPStatusCode {
case http.StatusUnauthorized:
log.Fatal("Invalid API key")
case http.StatusPaymentRequired:
log.Fatal("Insufficient balance. Please add funds.")
case http.StatusTooManyRequests:
log.Printf("Rate limited. Retry after some time.")
default:
log.Printf("API error: %v", apiErr)
}
return
}
log.Fatalf("Request error: %v", err)
}
fmt.Println(resp.Choices[0].Message.Content)
}Контекст и отмена
Используйте контексты Go для таймаутов и отмены запросов:
context.go
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("gp-your-api-key")
config.BaseURL = "https://api.gonkagate.com/v1"
client := openai.NewClientWithConfig(config)
// Create context with timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
resp, err := client.CreateChatCompletion(
ctx,
openai.ChatCompletionRequest{
Model: "Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
Messages: []openai.ChatCompletionMessage{
{Role: openai.ChatMessageRoleUser, Content: "Hello!"},
},
},
)
if err != nil {
if ctx.Err() == context.DeadlineExceeded {
log.Fatal("Request timed out")
}
log.Fatalf("Error: %v", err)
}
fmt.Println(resp.Choices[0].Message.Content)
}