package ioutil

import "io/ioutil"

ioutil包实现了I/O实用工具。

变量

var Discard io.Writer = devNull(0)

Discard是一个io.Writer,在该Writer上所有Write调用都可以在不执行任何操作的情况下成功完成。

函数NopCloser

func NopCloser(r io.Reader) io.ReadCloser

NopCloser返回一个ReadCloser,其中包含一个无操作(no-op)的Close方法,用于包装提供的Reader r

函数ReadAll

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

ReadAllr读取,直到出现错误或EOF并返回它读取到的数据。成功的调用将返回err==nil,而不是err==EOF。因为ReadAll被定义为从src读取直到EOF,所以它不会将来自ReadEOF视为要报告的错误。

r := strings.NewReader("Go is a general-purpose language designed with systems programming in mind.")

b, err := ioutil.ReadAll(r)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%s", b)

// 输出

Go is a general-purpose language designed with systems programming in mind.

函数ReadDir

func ReadDir(dirname string) ([]os.FileInfo, error)

ReadDir读取由dirname命名的目录,并返回按filename排序的目录条目列表。

files, err := ioutil.ReadDir(".")
if err != nil {
    log.Fatal(err)
}

for _, file := range files {
    fmt.Println(file.Name())
}

函数ReadFile

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

ReadFile读取由filename命名的文件并返回内容。成功的调用将返回err==nil,而不是err==EOF。因为ReadFile读取整个文件,所以它不会将Read中的EOF视为要报告的错误。

content, err := ioutil.ReadFile("testdata/hello")
if err != nil {
    log.Fatal(err)
}

fmt.Printf("File contents: %s", content)

// 输出

File contents: Hello, Gophers!

函数TempDir

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

TempDir在目录dir中创建一个新的临时目录,其名称以prefix开头,并返回新目录的路径。如果dir是空字符串,TempDir将使用临时文件的默认目录(请参阅os.TempDir)。同时调用TempDir的多个程序将不会选择相同的目录。调用者有责任在不再需要时删除目录。

content := []byte("temporary file's content")
dir, err := ioutil.TempDir("", "example")
if err != nil {
    log.Fatal(err)
}

defer os.RemoveAll(dir) // clean up

tmpfn := filepath.Join(dir, "tmpfile")
if err := ioutil.WriteFile(tmpfn, content, 0666); err != nil {
    log.Fatal(err)
}

函数TempFile

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

TempFile在目录dir中创建一个新的临时文件,打开文件进行读写,并返回生成的*os.File。文件名是通过获取pattern并在末尾添加随机字符串生成的。如果pattern包含“*”,则随机字符串将替换最后一个“*”。如果dir是空字符串,则TempFile使用临时文件的默认目录(请参阅os.TempDir)。同时调用TempFile的多个程序不会选择相同的文件。调用者可以使用f.Name()来查找文件的路径名。当不再需要时,调用者有责任删除该文件。

content := []byte("temporary file's content")
tmpfile, err := ioutil.TempFile("", "example")
if err != nil {
    log.Fatal(err)
}

defer os.Remove(tmpfile.Name()) // clean up

if _, err := tmpfile.Write(content); err != nil {
    log.Fatal(err)
}
if err := tmpfile.Close(); err != nil {
    log.Fatal(err)
}
content := []byte("temporary file's content")
tmpfile, err := ioutil.TempFile("", "example.*.txt")
if err != nil {
    log.Fatal(err)
}

defer os.Remove(tmpfile.Name()) // clean up

if _, err := tmpfile.Write(content); err != nil {
    tmpfile.Close()
    log.Fatal(err)
}
if err := tmpfile.Close(); err != nil {
    log.Fatal(err)
}

函数WriteFile

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

WriteFile将数据写入由filename命名的文件。如果该文件不存在,则WriteFile使用权限perm创建它;否则WriteFile会在写入之前截断它。

message := []byte("Hello, Gophers!")
err := ioutil.WriteFile("testdata/hello", message, 0644)
if err != nil {
    log.Fatal(err)
}
上次修改: 14 April 2020