Go 示例: 写入文件

在 Go 中写入文件遵循与我们之前看到的读取文件类似的模式。

package main
import (
    "bufio"
    "fmt"
    "os"
)
func check(e error) {
    if e != nil {
        panic(e)
    }
}
func main() {

首先,以下是如何将字符串(或字节)写入文件。

    d1 := []byte("hello\ngo\n")
    err := os.WriteFile("/tmp/dat1", d1, 0644)
    check(err)

对于更细粒度的写入,请打开一个文件以进行写入。

    f, err := os.Create("/tmp/dat2")
    check(err)

在打开文件后立即使用 Close 进行延迟操作是一种惯例。

    defer f.Close()

您可以按预期写入字节切片。

    d2 := []byte{115, 111, 109, 101, 10}
    n2, err := f.Write(d2)
    check(err)
    fmt.Printf("wrote %d bytes\n", n2)

还提供了一个 WriteString 函数。

    n3, err := f.WriteString("writes\n")
    check(err)
    fmt.Printf("wrote %d bytes\n", n3)

发出 Sync 命令以将写入内容刷新到稳定存储中。

    f.Sync()

除了我们之前看到的缓冲读取器之外,bufio 还提供缓冲写入器。

    w := bufio.NewWriter(f)
    n4, err := w.WriteString("buffered\n")
    check(err)
    fmt.Printf("wrote %d bytes\n", n4)

使用 Flush 确保所有缓冲操作都已应用于底层写入器。

    w.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

接下来,我们将探讨将我们刚刚看到的某些文件 I/O 想法应用于 stdinstdout 流。

下一个示例:行过滤器.