You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言发送带鉴权的GET请求如何获取HTTP响应状态码

核心错误点

你的代码存在4处问题,直接导致报错:

  • 混淆了请求构造和请求发送逻辑:http.NewRequest仅用于生成请求对象,返回值是*http.Request类型,本身不发起网络调用,该类型不存在StatusCode字段,自然无法调用对应属性
  • 类型不匹配:StatusCode是整型值,不能直接和字符串类型的状态文本通过+拼接
  • 资源泄漏风险:即使拿到正确的响应对象,原逻辑也没有关闭响应体的处理,会持续占用连接资源
  • 语法不符合规范:函数声明了字符串类型返回值,但函数体末尾没有返回语句,无法通过编译
可直接运行的正确实现
import (
	"fmt"
	"log"
	"net/http"
)

func StatusCode(PAGE string, AUTH string) (r string) {
	// 构造GET请求
	req, err := http.NewRequest("GET", PAGE, nil)
	if err != nil {
		log.Fatalf("构造请求失败: %v", err)
	}
	// 写入Authorization授权头
	req.Header.Set("Authorization", AUTH)

	// 初始化客户端并发送请求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		log.Fatalf("发送请求失败: %v", err)
	}
	// 延迟关闭响应体,避免资源泄漏
	defer resp.Body.Close()

	// 按要求拼接状态码和状态描述
	r = fmt.Sprintf("%d %s", resp.StatusCode, http.StatusText(resp.StatusCode))
	fmt.Println("HTTP Response Status:", r)
	return r
}
实现说明
  • 变量命名做了区分:构造请求阶段的返回值命名为req,请求发送后拿到的响应对象命名为resp,避免类型混淆
  • 使用fmt.Sprintf直接完成整型状态码和字符串状态文本的格式化拼接,不需要手动做类型转换,输出格式完全符合200 OK/400 Bad Request的预期效果
  • 增加了defer resp.Body.Close()逻辑,是Go语言HTTP请求的标准写法,避免TCP连接泄漏
  • 补全了返回逻辑,函数执行后会直接返回拼接好的状态字符串

内容的提问来源于stack exchange,提问作者X T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:57:20