发起 HTTP 请求
使用 http.NewRequest 和 http.DefaultClient 发起 GET、POST 请求
发起 HTTP 请求 是 CoddyKit 上的免费 Go Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
http.Get 快捷方式
http.Get(url) 是发出 GET 请求最简单的方式。请始终关闭响应体。
resp, err := http.Get("https://api.example.com/users")
if err != nil { return err }
defer resp.Body.Close()http.DefaultClient
http.Get 使用包级别的 DefaultClient。在生产环境中,请创建一个设置了超时的自定义客户端。
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)使用 http.NewRequest 获得完整控制
请使用 http.NewRequest 设置方法、请求头和请求体:
req, err := http.NewRequestWithContext(ctx, "POST", url, body)
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)请求体
通过 io.Reader 传入请求体。对于 JSON 负载,请使用 bytes.NewBuffer(data) 或 strings.NewReader。
data, _ := json.Marshal(payload)
req, _ := http.NewRequestWithContext(ctx, "POST", url, bytes.NewBuffer(data))检查响应状态
请始终检查 HTTP 状态码 — 默认情况下,4xx/5xx 不会作为 Go 错误返回。
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("unexpected status: %d", resp.StatusCode)
}解码 JSON 响应
请使用 json.Decoder 解码响应体,避免先将其全部读入内存:
var result APIResponse
json.NewDecoder(resp.Body).Decode(&result)查询参数
请使用 url.Values 构建查询字符串,并将其附加到 URL:
params := url.Values{}
params.Set("page", "1")
params.Set("limit", "20")
reqURL := baseURL + "?" + params.Encode()Client.Do 与自定义传输
包装 http.DefaultTransport,即可添加重试逻辑、自定义 TLS 或代理设置,同时保留默认行为。
必须关闭响应体
未能关闭响应体会泄漏底层 TCP 连接。即使是错误响应,也请始终使用 defer resp.Body.Close()。
跟随重定向
默认客户端最多跟随 10 次重定向。请设置 client.CheckRedirect,以自定义或禁用重定向跟随行为。
设置 User-Agent
请设置描述性 User-Agent 请求头,以便服务器日志识别您的客户端:
req.Header.Set("User-Agent", "myapp/1.0 (+https://myapp.com)")快速检查
为什么应该始终关闭 HTTP 响应体?
回顾:发出 HTTP 请求
关键要点:
- 始终 defer resp.Body.Close()
- 在生产环境中创建带 Timeout 的自定义 http.Client
- 使用 http.NewRequestWithContext 处理上下文并设置自定义请求头
- 检查 resp.StatusCode — HTTP 错误不是 Go 错误
常见问题解答
「发起 HTTP 请求」课时是免费的吗?
是的 — 「发起 HTTP 请求」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「发起 HTTP 请求」这节课中我会学到什么?
使用 http.NewRequest 和 http.DefaultClient 发起 GET、POST 请求 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「发起 HTTP 请求」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 发起 HTTP 请求
- 设置超时与请求头
- 解码 JSON 响应
- 错误处理与重试逻辑