首页 > 技术文章 > Golang理解-io注意事项

vinsent 2019-08-01 16:23 原文

io处理的选择方式

io处理有很多方法,系统也为我们提供了几个包ioioutilbufio

注册事项

  • 如果字符串大小不大,使用那个都行
  • 如果字符串过大,则需要使用bufio以及io包的一些方法

ioutils.ReadString(f),会将f文件全部读取为一个字符串, 对内存开销大

io.Copy(dest, src), 可以将src的内容流式copy到dest中

ioutil.Discard 垃圾桶

例如:

package main

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

func main() {
	if len(os.Args[1:]) < 1 {
		fmt.Println("At least 1 params")
		os.Exit(1)
	}
	for _, url := range os.Args[1:] {
		res, err := http.Get(url)
		if err != nil {
			fmt.Println(err)
			continue
		}

		f, _ := os.OpenFile("./a.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
		defer f.Close()

		_, err = io.Copy(f, res.Body)
		if err != nil {
			fmt.Println(err)
			os.Exit(1)
		}
		// data, err := ioutil.ReadAll(res.Body)

		defer res.Body.Close()
	}
}

推荐阅读