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()

您可以照預期般 Write 位元組切片。

    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 串流。

下一篇範例:行過濾器