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
相关产品推荐
相关产品推荐

