答案:在Golang中解析HTTP响应Body需正确读取io.ReadCloser并关闭以避免泄漏;小响应可使用io.ReadAll读取全部内容,自Go 1.16起推荐从io包调用;若响应为JSON,可结合json.Unmarshal解析到结构体;对于大响应,应采用流式处理,如bufio.Scanner逐行读取文本,或json.Decoder实现流式解码,避免内存溢出;始终defer resp.Body.Close()以释放资源。

在Golang中解析HTTP响应Body,关键在于正确读取和处理http.Response中的Body字段。这个字段是io.ReadCloser类型,需要手动读取并关闭,避免资源泄漏。下面介绍几种常见且实用的方法。
最简单的方式是使用ioutil.ReadAll将整个Body读取为字节切片。适合Body较小的情况。
示例代码:
resp, err := http.Get("https://api.example.com/data")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
注意:从Go 1.16开始,ioutil.ReadAll被移至io包,推荐使用io.ReadAll替代。
立即学习“go语言免费学习笔记(深入)”;
如果响应是JSON格式,可以结合json.Unmarshal将数据解析到结构体中。
步骤如下:
本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。
466
json.Unmarshal解析示例:
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
resp, err := http.Get("https://api.example.com/user")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
var user User
err = json.Unmarshal(body, &user)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Name: %s, Age: %d\n", user.Name, user.Age)
当响应Body较大时(如下载文件或处理大JSON流),应避免一次性加载到内存。可以使用bufio.Scanner或直接按块读取。
示例:逐行读取文本响应
resp, err := http.Get("https://api.example.com/large-text")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
对于JSON流,可考虑使用json.Decoder进行流式解析:
decoder := json.NewDecoder(resp.Body)
var v YourStruct
for decoder.More() {
if err := decoder.Decode(&v); err != nil {
log.Fatal(err)
}
// 处理每个对象
}
基本上就这些。根据响应大小和格式选择合适的解析方式,记得总是关闭Body,防止连接泄露。小响应用io.ReadAll加json.Unmarshal,大响应优先考虑流式处理。
以上就是如何在Golang中解析HTTP响应Body的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号