专业编程基础技术教程

网站首页 > 基础教程 正文

Go语言学习基础-读文件、写文件、行过滤器

ccvgpt 2024-11-26 00:56:39 基础教程 1 ℃

Reading File 读文件

读写文件是许多Go程序所需的基本任务。首先,我们将看一些读取文件的示例。读取文件需要检查是否出现调用错误。

最基本的文件读取任务是将文件的全部内容读到内存中ioutil.ReadFile。

Go语言学习基础-读文件、写文件、行过滤器

也可以控制读取文件的方式和内容。对于这些任务,首先打开一个文件os.Open以获取os.File对象。可以从文件开头读取Read一些字节,并且允许指定读取的字节数,但以实际读取的字节数为准。

还可以从指定的文件位置读取。io包提供了一些可能有助于文件读取的功能。例如,使用io.ReadAtLeast使得程序更加健壮。

没有内置rewind,使用Seek(0, 0)实现类似的功能。bufio包实现了一个带缓冲的读取器bufio.NewReader,它在频繁地、小长度的读取操作很有效率。

读取文件完成后需要关闭该文件(通常在打开文件后立刻使用defer关闭文件)。

结果:

$ echo "hello" > /tmp/dat

$ echo "go" >> /tmp/dat

$ go run reading-files.go

hello

go

5 bytes: hello

2 bytes @ 6: go

2 bytes @ 6: go

5 bytes: hello

Writing File 写文件

在Go中写入文件的模式与我们前面看到的读取文件的操作类似。

首先,这里介绍如何将字符串(或仅字节)转储到文件中。要进行更细微的写入控制,使用打开文件方法os.Create进行写入。在打开文件后立即延迟关闭是一种习惯做法。您可以按预期Write写入字节切片。还可以使用WriteString直接写入字符串。Sync方法使写入操作刷新到存储器上。

除了前面看到的缓冲读取器bufio.NewReader之外,bufio还提供了缓冲写入器bufio.NewWriter。使用Flush可确保所有缓冲的操作都已应用于底层的写入器上。

结果:

$ go run writing-files.go

wrote 5 bytes

wrote 7 bytes

wrote 9 bytes

$ cat /tmp/dat1

hello

go

$ cat /tmp/dat2

some

writes

buffered

Line Filte 行过滤器

行过滤器是一种常见的程序类型,它在stdin上读取输入,对其进行处理,然后将结果打印到stdout上。grep和sed是常用的行过滤器,下面是Go中行过滤器的一个示例,它打印每行输入的大写版本。

您可以使用此模式来编写自己的Go行过滤器。使用bufio.NewScanner包装未缓冲的os.Stdin,此包装提供了一种方便的扫描方法Scan,可以将扫描仪推进到下一个标记,即下一行。Text从输入返回当前标记,即本行文本,打印出文本的大写版本。在扫描过程中检查错误,错误并未包含文件末尾。

结果:

$ echo 'hello' > /tmp/lines

$ echo 'filter' >> /tmp/lines

$ cat /tmp/lines | go run line-filters.go

HELLO

FILTER

Tags:

最近发表
标签列表