golang文件读取介绍

golang提供了多种文件读取方式,第一种方式,也是最简单的一种方式,如下:
	bytes, err := ioutil.ReadFile("a.txt")
	if err != nil {
		panic(err)
	}
	fmt.Println(string(bytes))

该种方式需要引入ioutil包,ioutil.ReadFile的入参为文件名,返回值分别是文件内容,和错误信息。


第二种方式需要通过os.Open打开文件,然后通过ioutil.ReadAll来读取,如下:

	fin, err := os.Open("a.txt")
	if err != nil {
		panic(err)
	}
	defer fin.Close()

	bytes, err := ioutil.ReadAll(fin)
	if err != nil {
		panic(err)
	}

	fmt.Println(string(bytes))

第二种方式需要同时引入os包和ioutil包,os.Open入参为文件名,返回值分别是文件句柄和错误信息,ioutil.ReadAll入参为io.Reader,因为File实现了io.Reader接口(File支持Read方法),所以fin可以直接转换为io.Reader,返回值和io.ReadFile相同。


第三种方式同样先使用os.Open打开文件,然后使用File的Read方法读取内容,如下:

	fin, err := os.Open("a.txt")
	if err != nil {
		panic(err)
	}
	defer fin.Close()

	buf := make([]byte, 11)
	_, err = fin.Read(buf)
	if err != nil {
		panic(err)
	}

	fmt.Println(string(buf))

与前两种方式不同,该种方式需要自己管理内存。该种方式只需引入os包。


第四种方式同样需要先使用os.Open打开文件,然后创建一个bufio.Reader对象,通过bufio.Reader对象去读取内容,如下:

	fin, err := os.Open("a.txt")
	if err != nil {
		panic(err)
	}
	defer fin.Close()

	rd := bufio.NewReader(fin)
	buf := make([]byte, 11)
	_, err = rd.Read(buf)
	if err != nil {
		panic(err)
	}

	fmt.Println(string(buf))

该种方式亦需要自己管理内存。表面上看,该种方式多此一举,但实际并非如此,因为bufio.Reader提供了更丰富的处理方法,如ReadLine,ReadString,ReadBytes等,可以减少开发工作。

你可能感兴趣的:(GO)