千里送鹅毛,礼轻情意重
社会越发展,人与人之间的隔阂在不断的增多,或许在过数十年,人们也许会怀念曾经那个物质匮乏但人心淳朴的纯真年代,在那些日子中,人与人之间多的是温情,少的是彼此之间的狡诈。评价一个人从来不会以挣几个w为衡量的标准,更多的是从人的品行出发,来客观的评价一个人。
go语言的ioutil包
ioutil包在1.16版本之前相关的函数、方法的数量挺多的,后来go的研发团队考虑到将io相关的功能存放在这样的一个包中是偷懒的行为,于是后续的大部分的功能实现拆分到了io包和os包中。下面将针对该包内的函数和方法展开讲解。
package main
/*********************************************************************/
/**************** golang中io.ioutil包相关API讲解 *********************/
/********************************************************************/
/*
Variables
func NopCloser(r io.Reader) io.ReadCloser
func ReadAll(r io.Reader) ([]byte, error)
func ReadDir(dirname string) ([]fs.FileInfo, error)
func ReadFile(filename string) ([]byte, error)
func TempDir(dir, pattern string) (name string, err error)
func TempFile(dir, pattern string) (f *os.File, err error)
func WriteFile(filename string, data []byte, perm fs.FileMode) error
*/
func main() {
/**
*NopCloser 返回一个包裹起给定Reader r的 ReadCloser , 这个 ReadCloser 带有一个无参数的 Close 方法。
*func NopCloser(r io.Reader) io.ReadCloser
*/
/*
r := strings.NewReader("hello world!")
rr := ioutil.NopCloser(r)
fmt.Println(rr)
*/
/**
*对 r 进行读取, 直到发生错误或者遇到 EOF 为止,然后返回被读取的数据。一次成功的读取将返回 nil 而不是 EOF作为err的值:
*这是因为 ReadAll 的定义就是要读取 r 直到遇到 EOF 为止, 所以它不会把读取到的 EOF 当做错误, 也不会向调用者返回它。
*func ReadAll(r io.Reader) ([]byte, error)
*/
/*
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)
*/
/**
*读取dirname指定的目录, 并返回一个根据文件名进行排序的目录节点列表。
*func ReadDir(dirname string) ([]fs.FileInfo, error)
*/
/*
files, err := ioutil.ReadDir(".")
if err != nil {
log.Fatal(err)
}
for _, file := range files {
fmt.Println(file.Name())
}
*/
/**
*读取名字为filename的文件并返回文件中的内容。一次成功的读取将返回nil而不是EOF作为err的值:
*这是因为ReadFile的定义就是要读取整个文件, 所以它不会把读取到的EOF当做错误,也不会向调用者返回它。
*func ReadFile(filename string) ([]byte, error)
*/
/*
content, err := ioutil.ReadFile("sdk/test.txt")
if err != nil {
log.Fatal(err)
}
fmt.Printf("File contents: %s", content)
*/
/**
*TempDir在目录dir中创建一个名称以前缀开头的新临时目录并返回新目录的路径。如果dir是空字符串,
*TempDir使用临时文件的默认目录。同时调用TempDir的多个程序不会选择相同的目录。当不再需要时删
*除目录是调用者的责任。
*func TempDir(dir, pattern string) (name string, err error)
*/
/*
dir, err := ioutil.TempDir("", "example")
if err != nil {
log.Fatal(err)
}
defer os.RemoveAll(dir) // clean up
fmt.Println(dir)
*/
/**
*TempFile在目录dir中创建一个名称以前缀开头的新临时文件,打开文件进行读写操作,并返回结果
*os.File 。如果dir是空字符串,TempFile 使用临时文件的默认目录(请参阅 os.TempDir)。同时调用
*TempFile的多个程序不会选择相同的文件。调用者可以使用 f.Name() 来查找文件的路径名。
*主叫方有责任在不再需要时删除文件
*func TempFile(dir, pattern string) (f *os.File, err error)
*/
/*
tmpfile, err := ioutil.TempFile("", "example")
if err != nil {
log.Fatal(err)
}
defer os.Remove(tmpfile.Name()) // clean up
fmt.Println(tmpfile.Name())
*/
/**
*将给定的数据 data 写入到名字为filename的文件里面。如果文件不存在,那么使用给定的权限 perm 去创建它;
*如果文件已经存在, 那么 WriteFile 在对其进行写入之前会先清空文件中已有的内容。
*func WriteFile(filename string, data []byte, perm fs.FileMode) error
*/
/*
message := []byte("Hello, Gophers!")
err := ioutil.WriteFile("hello", message, 0644)
if err != nil {
log.Fatal(err)
}
*/
}
小结
ioutil包部分的内容相对比较少,其中部分函数和功能还是需要重点掌握的,反正都已经学了这么久的基础类库了,相信拿下这个包的内容应该不在话下。