golang使用io包和os包代替ioutil.ReadAll
🕙2023-07-06
ioutil.ReadAll方法从Go1.16版本开始就被弃用了,原因是在写入大文件时会因为内存原因导致出错,Go1.16版本后推荐使用io包和os包来代替ioutil.ReadAll方法
使用ioutil.ReadAll方法
// 读取配置文件
bytes, err := ioutil.ReadFile("conf.json")
if err != nil {
fmt.Println("Failed to read config file:", err)
return
}
使用io包和os包代替
// 读取配置文件
file, err := os.Open("conf.json")
if err != nil {
fmt.Println("Failed to open config file:", err)
return
}
defer file.Close()
// 获取文件大小
stat, err := file.Stat()
if err != nil {
fmt.Println("Failed to get file size:", err)
return
}
// 分配足够的空间来存储文件内容
bytes := make([]byte, stat.Size())
// 读取文件内容
_, err = io.ReadFull(file, bytes)
if err != nil {
fmt.Println("Failed to read file:", err)
return
}
读取http body
var req conf.ExReq
var body []byte
var err error
if r.ContentLength > 0 {
body = make([]byte, r.ContentLength)
_, err = io.ReadFull(r.Body, body)
if err != nil {
fmt.Println("Failed to read request body:", err)
return
}
}
// 解析响应数据
err = json.Unmarshal(body, &req)
if err != nil {
fmt.Println("Failed to unmarshal response data:", err)
return
}
改变为Buffer类型
// 创建一个 bytes.Buffer 用于存储文件内容
buffer := &bytes.Buffer{}
// 将文件内容拷贝到 bytes.Buffer
_, err = io.Copy(buffer, file)
if err != nil {
fmt.Println("无法拷贝文件内容:", err)
return
}
// 现在 buffer 中包含了文件内容
fmt.Println("文件内容:", buffer.String())
}