io.copy是按默认的缓冲区32k循环操作的,不会将内容一次性全写入内存中,这样就能解决大文件的问题。
resp, err := http.Get(url)
if err != nil {
fmt.Fprint(os.Stderr, "get url error", err)
}
defer resp.Body.Close()
out, err := os.Create("/tmp/icon.png")
wt := bufio.NewWriter(out)
defer out.Close()
// 按一定大小循环写入数据,避免大文件造成内存溢出
n, err := io.Copy(wt, resp.Body)
fmt.Println("write", n)
if err != nil {
panic(err)
}
// 将缓冲中的数据真正写到文件
wt.Flush()
有疑问加站长微信联系(非本文作者)