2 回答
TA贡献1828条经验 获得超3个赞
使用ioutil.ReadAll。该函数返回一个字节片。
切片可以有效地传递。切片是指向后备数组、长度和容量的指针。
type ImageData struct {
Data []byte
Name string
}
func FetchImage(url string) ([]byte, error) {
res, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if res.StatusCode != 200 {
return nil, fmt.Errorf("%s: %d", url, res.StatusCode)
}
return ioutil.ReadAll(resp.Body)
}
func Save(data *ImageData) error {
file, err := os.Create(data.Name)
if err != nil {
return err
}
defer file.Close()
_, err := file.Write(data.Data)
return err
}
您也可以传递响应主体,但要小心。响应主体必须关闭才能释放底层连接。问题中的代码确实关闭了响应主体,但很难看到,因为响应主体传递到关闭它的函数。
- 2 回答
- 0 关注
- 184 浏览
添加回答
举报