Skip to content

Go 调用 GPT API 完整示例 ​

用官方的 github.com/openai/openai-go/v3,创建客户端时加上 option.WithBaseURL("https://hivegpt.cn/v1") 和你的 HiveGPT Key,其余代码和调用 OpenAI 官方接口一样。 下面每段代码都是完整的 main.go,可以直接 go run。

更新于 2026-10,基于 openai-go v3.74,Go 1.22 及以上。模型名以你的 Key 能用的为准,见 查看可用模型。

准备 ​

bash
go mod init demo
go get github.com/openai/openai-go/v3

注意导入路径带 /v3。不带版本号的 github.com/openai/openai-go 是旧的 v1,API 不一样。

Key 放进环境变量,不要写死在代码里:

bash
export HIVEGPT_API_KEY="sk-你的Key"
powershell
$env:HIVEGPT_API_KEY="sk-你的Key"

还没有 Key:到 API 密钥 页创建一个,分组选 GPT 类分组。

基本对话 ​

go
package main

import (
	"context"
	"fmt"
	"os"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/option"
)

func main() {
	client := openai.NewClient(
		option.WithBaseURL("https://hivegpt.cn/v1"),
		option.WithAPIKey(os.Getenv("HIVEGPT_API_KEY")),
	)

	resp, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{
		Model: "gpt-5.5",
		Messages: []openai.ChatCompletionMessageParamUnion{
			openai.SystemMessage("你是一位耐心的编程老师,回答简洁。"),
			openai.UserMessage("Go 的 goroutine 和线程有什么区别?"),
		},
	})
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Choices[0].Message.Content)
	fmt.Println("本次用量:", resp.Usage.TotalTokens, "tokens")
}

流式输出 ​

回答边生成边打印。长回答一定要用流式,见 请求超时:

go
package main

import (
	"context"
	"fmt"
	"os"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/option"
)

func main() {
	client := openai.NewClient(
		option.WithBaseURL("https://hivegpt.cn/v1"),
		option.WithAPIKey(os.Getenv("HIVEGPT_API_KEY")),
	)

	stream := client.Chat.Completions.NewStreaming(context.Background(), openai.ChatCompletionNewParams{
		Model:    "gpt-5.5",
		Messages: []openai.ChatCompletionMessageParamUnion{openai.UserMessage("写一首关于秋天的四行小诗")},
	})
	for stream.Next() {
		chunk := stream.Current()
		if len(chunk.Choices) > 0 {
			fmt.Print(chunk.Choices[0].Delta.Content)
		}
	}
	if err := stream.Err(); err != nil {
		panic(err)
	}
	fmt.Println()
}

多轮对话 ​

模型不记得上一轮说了什么,每次请求都要带上之前的对话。ToParam() 把模型的回复转成可以放回消息列表的格式:

go
package main

import (
	"context"
	"fmt"
	"os"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/option"
)

func main() {
	client := openai.NewClient(
		option.WithBaseURL("https://hivegpt.cn/v1"),
		option.WithAPIKey(os.Getenv("HIVEGPT_API_KEY")),
	)
	ctx := context.Background()

	messages := []openai.ChatCompletionMessageParamUnion{openai.SystemMessage("你是一位旅行规划助手。")}
	for _, question := range []string{"我五月想去云南玩 5 天", "预算 5000 元够吗?", "那第一天怎么安排?"} {
		messages = append(messages, openai.UserMessage(question))
		resp, err := client.Chat.Completions.New(ctx, openai.ChatCompletionNewParams{Model: "gpt-5.5", Messages: messages})
		if err != nil {
			panic(err)
		}
		answer := resp.Choices[0].Message
		messages = append(messages, answer.ToParam())
		fmt.Printf("问:%s\n答:%s\n\n", question, answer.Content)
	}
}

重试、超时和错误处理 ​

go
package main

import (
	"context"
	"errors"
	"fmt"
	"os"
	"time"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/option"
)

func main() {
	client := openai.NewClient(
		option.WithBaseURL("https://hivegpt.cn/v1"),
		option.WithAPIKey(os.Getenv("HIVEGPT_API_KEY")),
		option.WithMaxRetries(3),                 // 429 / 5xx 自动重试
		option.WithRequestTimeout(2*time.Minute), // 单次请求超时
	)

	resp, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{
		Model:    "gpt-5.5",
		Messages: []openai.ChatCompletionMessageParamUnion{openai.UserMessage("你好")},
	})
	var apiErr *openai.Error
	switch {
	case errors.As(err, &apiErr):
		// Message 是 HiveGPT 返回的中文说明(括号里是英文原文),Code 是错误代码
		fmt.Println("请求失败:", apiErr.StatusCode, apiErr.Code, apiErr.Message)
	case err != nil:
		fmt.Println("连不上服务器,检查网络和代理:", err)
	default:
		fmt.Println(resp.Choices[0].Message.Content)
	}
}

Key 无效时会打印:

text
请求失败: 401 INVALID_API_KEY API Key 无效或已被删除,请到控制台「API 密钥」复制一个有效的 Key 后重试(Invalid API key)

按状态码处理:401 是 Key 的问题,404 是地址或模型名的问题,429 是请求太快或额度用完。见 报错速查。

常见问题 ​

现象原因处理
编译报 undefined: openai.ChatCompletionNewParams 等导入了旧版 github.com/openai/openai-go(v1)改成 github.com/openai/openai-go/v3
404,「接口地址少了 /v1」或「多了一个 /v1」WithBaseURL 写错写成 https://hivegpt.cn/v1,见 Base URL 要不要加 /v1
401,apiErr.Message 显示 Key 无效Key 不对,或环境变量没读到见 401 报错
404,提示分组「不支持模型」模型名不在你的分组里见 模型不存在
context deadline exceeded请求超时调大 WithRequestTimeout,长回答用流式
连接被拒绝、proxyconnect 报错设置了 HTTPS_PROXY 但代理没开关掉代理环境变量,HiveGPT 在国内可直接访问

下一步 ​

代码示例在页面里运行时使用 HiveGPT 的模型接口。延伸阅读来自 JavaGuide(Apache-2.0),版权归原作者。