Skip to main content

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)
}
Была ли эта страница полезной?