要用Go语言调用DeepSeek API完成文本生成任务,必须先获取有效API密钥、构造符合要求的HTTP请求体,并正确处理流式或非流式响应;直接写错Content-Type或漏掉Authorization头会导致401或400错误,后续所有调试都将卡在这一步。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要用Go语言调用DeepSeek API完成文本生成任务,必须先获取有效API密钥、构造符合要求的HTTP请求体,并正确处理流式或非流式响应。直接写错Content-Type或漏掉Authorization头会导致401或400错误,后续所有调试都将卡在这一步。
准备认证与基础配置
第一步:登录DeepSeek官网控制台,在「API Keys」页面创建一个新的Secret Key,复制保存——【该密钥只显示一次,关闭页面后无法再次查看】。
第二步:新建Go项目,初始化模块并安装标准库依赖:go mod init deepseek-demo,无需第三方HTTP客户端,net/http足够稳定可靠。
第三步:定义全局变量存储API地址和密钥,避免硬编码在请求函数中:const baseURL = "https://api.deepseek.com/v1";var apiKey = "sk-xxx..."。
构造并发送POST请求
方法一:使用json.Marshal构建标准请求体
声明结构体匹配官方文档要求的chat/completions接口字段,至少包含model、messages、temperature三项;messages是对象数组,每个对象含role("user"或"assistant")和content字符串。
调用json.Marshal将结构体序列化为字节切片,再用bytes.NewReader包装成io.Reader传给http.NewRequest。
设置请求头:Header.Set("Content-Type", "application/json") → Header.Set("Authorization", "Bearer "+apiKey) ——【Authorization值必须带Bearer前缀且与密钥间有空格,缺一不可】。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
执行client.Do(req)发起请求,检查resp.StatusCode是否为200,非200需读取resp.Body并解析error字段再panic或返回错误。
解析标准JSON响应
声明响应结构体,嵌套字段需与API返回一致:含id、object、created、model、choices(切片)、usage。
choices[0].message.content即为模型返回的文本答案,直接提取即可。
这一步操作起来很简单,直接用json.NewDecoder(resp.Body).Decode(&respData)就行,但注意struct字段名必须首字母大写且加json tag,否则解码为空。
处理流式响应(stream=true)
方法二:逐行读取Server-Sent Events(SSE)格式数据
在请求体中将stream设为true,Content-Type保持application/json不变,服务端会以text/event-stream方式分块返回。
用bufio.NewReader(resp.Body)包装响应体,循环调用reader.ReadString('\n'),跳过空行和event:、data:前缀,对每段data:后的JSON字符串用json.Unmarshal解析。
每次解析出一个delta.content就立即打印或拼接,直到读到data: [DONE]为止——【不要忽略[DONE]标记,否则goroutine可能永久阻塞】。


















