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基本使用方法的主要内容,如果未能解决你的问题,请参考以下文章

纯golang爬虫实战(三)

golang goroutine例子[golang并发代码片段]

golang代码片段(摘抄)

代码片段 - Golang 实现简单的 Web 服务器

代码片段 - Golang 实现集合操作

json [Golang] golang #golang #snippets中有用的片段