欢迎访问宙启技术站
智能推送

util包中常用函数的详细解析:从系统输入到文件读写

发布时间:2023-06-05 19:21:46

util包是Go语言标准库提供的一个工具包,其中包含了许多常用的函数,可以方便地实现各种常见的操作,例如从系统输入读取数据或将数据写入文件等。本文将从系统输入到文件读写这一流程出发,对util包中常用函数进行详细解析。

1. 从系统输入读取数据

读取系统输入的函数有两个,分别是fmt.Scan和bufio.Scanner。前者是标准库中提供的最基本的输入函数,逐个读取由空格或回车分隔的数据,直到回车为止。后者则是更高效和灵活的读取方式,可以逐行读取数据并且支持自定义分隔符。

fmt.Scan函数的使用示例:

var x int
var y float64
fmt.Scan(&x, &y)

上面的代码中,首先定义了两个变量x和y,然后使用Scan函数依次读入x和y的值。注意到&符号用于获取变量的地址,这是因为Scan函数需要通过地址来修改变量的值。

bufio.Scanner函数的使用示例:

scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
    line := scanner.Text()
    // 处理读取到的数据
}
if err := scanner.Err(); err != nil {
    fmt.Fprintln(os.Stderr, "reading standard input:", err)
}

这个示例代码使用了bufio包中的Scanner函数来读取系统输入,同时通过for循环实现逐行读取。注意到Text方法可以获取当前行的内容,而Err方法则用于检测读取过程是否出错。

2. 写入数据到文件

将数据写入文件的函数也有两个,分别是fmt.Fprint和bufio.Writer。前者和fmt.Scan类似,是标准库中提供的最基本的输出函数,可以将指定的数据依次写入输出流中;后者则是更高效和灵活的写入方式,可以缓存一定量的数据并一次性写入文件,从而提高写入效率。

fmt.Fprint函数的使用示例:

file, err := os.Create("output.txt")
if err != nil {
    log.Fatal("Cannot create file", err)
}
defer file.Close()
fmt.Fprint(file, "Hello world!")

上面的代码中,首先通过os.Create函数创建了一个名为output.txt的文件,然后使用fmt.Fprint函数将字符串"Hello world!"写入该文件。文件的关闭使用了defer语句,可以确保在程序结束之前自动关闭文件。

bufio.Writer函数的使用示例:

file, err := os.Create("output.txt")
if err != nil {
    log.Fatal("Cannot create file", err)
}
defer file.Close()
writer := bufio.NewWriter(file)
for i := 1; i <= 100; i++ {
    fmt.Fprintf(writer, "Line %d
", i)
}
writer.Flush()

这个示例代码将1到100的数字逐行写入名为output.txt的文件中。首先通过os.Create函数创建文件,然后使用bufio.NewWriter创建一个新的缓存区,将所有数据写入缓存后一次性写入文件。最后调用Flush方法将缓存中的数据真正写入文件。

综上所述,util包中的函数可以方便地实现从系统输入到文件读写的各项操作,使得程序的编写和维护更加快捷和高效。用户可以根据自己的实际需求选择适当的函数,从而更好地完成各种任务。