GO语言ioutil包

Posted sunansheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO语言ioutil包相关的知识,希望对你有一定的参考价值。

ioutil标准库中提供了一些常用、方便的IO操作函数。

ReadAll 函数

很多时候,我们需要一次性读取io.Reader中的数据,通过上一节的讲解,我们知道有很多种实现方式。考虑到读取所有数据的需求比较多,Go提供了ReadAll这个函数,用来从io.Reader中一次读取所有数据。

func ReadAll(r io.Reader) ([]byte, error)

package main

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

func main() 
    file, _ := os.Open(`file_path`)
    con, _ := ioutil.ReadAll(file)
    fmt.Println(string(con))

该函数成功调用后会返回err == nil而不是err == EOF。

ReadDir 函数

ioutil中提供了一个方便的函数:ReadDir,它读取目录并返回排好序的文件和子目录名([]os.FileInfo)。

package main

import (
    "fmt"
    "io/ioutil"
)

func main() 

    fileInfos, err := ioutil.ReadDir("d:")
    if err != nil 
        fmt.Println(err)
        return
    

    for _, info := range fileInfos 
        fmt.Println(info.Name(),info.IsDir(),info.Mode())
    

ReadFile 和 WriteFile 函数

ReadFile的实现和ReadAll类似,不过,ReadFile会先判断文件的大小,给bytes.Buffer一个预定义容量,避免额外分配内存。

ReadFile 函数的签名如下:

func ReadFile(filename string) ([]byte, error)

ReadFile 从filename指定的文件中读取数据并返回文件的内容。成功的调用返回的err为nil而非EOF。因为本函数定义为读取整个文件,它不会将读取返回的EOF视为应报告的错误。

func main() 
    con,err := ioutil.ReadFile(`filepath`)
    fmt.Println(string(con),err)

WriteFile 函数的签名如下:

func WriteFile(filename string, data []byte, perm os.FileMode) error

WriteFile 将data写入filename文件中,当文件不存在时会根据perm指定的权限进行创建一个,文件存在时会先清空文件内容。对于perm参数,我们一般可以指定为:0666,具体含义os包中讲解。

func main() 
    con := []byte("this is text")
    err := ioutil.WriteFile("d:/a.txt",con,0666)
    if err!=nil
        fmt.Println(err)
    

TempDir 和 TempFile 函数

操作系统中一般都会提供临时目录,比如linux下的/tmp目录(通过os.TempDir()可以获取到)。有时候,我们自己需要创建临时目录,通过TempDir创建一个临时目录,用于存放编译过程的临时文件:

func TempDir(dir, prefix string) (name string, err error)

第一个参数如果为空,表明在系统默认的临时目录(os.TempDir)中创建临时目录;第二个参数指定临时目录名的前缀,该函数返回临时目录的路径。

相应的,TempFile用于创建临时文件。

func TempFile(dir, pattern string) (f *os.File, err error)

func main() 
    work, err := ioutil.TempDir("", "go-build")
    fmt.Println(work,err)

    f1, err := ioutil.TempFile(work, "gofmt")
    fmt.Println(f1.Name(),err)

    defer func() 
        f1.Close()
        os.Remove(f1.Name())
        os.Remove(work)
    ()


输出:
C:\\Users\\suns\\AppData\\Local\\Temp\\go-build085682643 <nil>
C:\\Users\\suns\\AppData\\Local\\Temp\\go-build085682643\\gofmt770746134 <nil>

这里需要注意:创建者创建的临时文件和临时目录要负责删除这些临时目录和文件。

声明:sunansheng 发表于 2019-04-25 16:23:00 ,共计481字。

转载请署名:GO语言ioutil包 | www.sunansheng.com

以上是关于GO语言ioutil包的主要内容,如果未能解决你的问题,请参考以下文章

GO语言ioutil包

Go语言自学系列 | golang标准库ioutil包

go语言读写文件的几种方式

2022-09-24:以下go语言代码输出什么?A:1;B:3;C:13;D:7。 package main import ( “fmt“ “io/ioutil“ “net/

GO语言-基础语法:条件判断

go语言的文件简单的操作