从 Go 1.16 开始,建议使用 io.ReadAll 函数来代替废弃的 ioutil.ReadAll 函数

12 min read

从 Go 1.16 开始,ReadAll 函数已被标记为废弃,建议使用 io.ReadAll 函数来代替。

io.ReadAll 函数的用法与 ioutil.ReadAll 函数基本相同,都是从一个 io.Reader 中读取所有数据,直到遇到错误或者读取到了 EOF(文件结束符),然后返回读取到的所有数据。如果读取成功,函数将返回 err == nil,否则返回一个非 nil 的错误对象。

以下是一个示例,演示了如何使用 io.ReadAll 函数从一个 http.Response 中读取所有数据:

resp, err := http.Get("https://example.com")
if err != nil {
    log.Fatal(err)
}

defer resp.Body.Close()

body, err := io.ReadAll(resp.Body)
if err != nil {
    log.Fatal(err)
}

fmt.Println(string(body))

在上面的代码中,我们首先使用 http.Get 函数向 https://example.com 发送一个 GET 请求,并得到一个 http.Response 对象 resp。然后,我们使用 defer 语句来确保在函数返回之前关闭 resp.Body。接下来,我们使用 io.ReadAll 函数从 resp.Body 中读取所有数据,并将结果保存在一个字节数组 body 中。最后,我们将 body 转换为字符串,并将其打印到控制台中。