golang:io.copy基本使用方法
Posted live4m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang:io.copy基本使用方法相关的知识,希望对你有一定的参考价值。
先看一段代码:
http.Get()获取数据并写入文件.
思路是将body数据全部读入内存,然后再写到目的文件中.
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://www.baidu.com/"
resp, err := http.Get(url)
if err != nil {
fmt.Printf("Http.Get(url) err: %v.\\n", err)
return
}
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Printf("ioutil.ReadAll(resp.Body) err: %v.\\n", err)
return
}
resp.Body.Close()
ioutil.WriteFile("body.txt", b, 0600)
}
但是当数据很大的时候,可能没办法全部读入内存,
io库中提供了一个copy方法:
io.copy(dst,src)从src读,写入dst中.
使用io.copy()代替ioutil.ReadAll()+ioutil.WriteFile(),
这样就不需要将数据先读取到内存中了.
改写之后的代码:
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
url := "https://www.baidu.com/"
resp, err := http.Get(url)
if err != nil {
fmt.Printf("Http.Get(url) err: %v.\\n", err)
return
}
f, err := os.Create("body2.txt")
if err != nil {
fmt.Printf("os.Create() err: %v.\\n", err)
}
io.Copy(f, resp.Body)
resp.Body.Close()
}
以上是关于golang:io.copy基本使用方法的主要内容,如果未能解决你的问题,请参考以下文章