golang:基本使用方法

时间:2025-02-28 07:53:37

先看一段代码:
http.Get()获取数据并写入文件.
思路是将body数据全部读入内存,然后再写到目的文件中.
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	url := "/"
	resp, err := http.Get(url)
	if err != nil {
		fmt.Printf("(url) err: %v.\n", err)
		return
	}

	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Printf("() err: %v.\n", err)
		return
	}
	resp.Body.Close()

	ioutil.WriteFile("", 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 := "/"
	resp, err := http.Get(url)
	if err != nil {
		fmt.Printf("(url) err: %v.\n", err)
		return
	}
	f, err := os.Create("")
	if err != nil {
		fmt.Printf("() err: %v.\n", err)
	}
	io.Copy(f, resp.Body)
	resp.Body.Close()
}