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)
ReadAll
从r
读取,直到出现错误或EOF
并返回它读取到的数据。成功的调用将返回err==nil
,而不是err==EOF
。因为ReadAll
被定义为从src
读取直到EOF
,所以它不会将来自Read
的EOF
视为要报告的错误。
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)
}