概念簡介
Go語言寫文件和我們前麵看過的讀操作有著相似的方式。
例程代碼
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
// 開始,這裏是展示如何寫入一個字符串(或者隻是一些
// 字節)到一個文件。
d1 := []byte("hello\ngo\n")
err := ioutil.WriteFile("/tmp/dat1", d1, 0644)
check(err)
// 對於更細粒度的寫入,先打開一個文件。
f, err := os.Create("/tmp/dat2")
check(err)
// 打開文件後,習慣立即使用 defer 調用文件的 `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")
fmt.Printf("wrote %d bytes\n", n3)
// 調用 `Sync` 來將緩衝區的信息寫入磁盤。
f.Sync()
// `bufio` 提供了和我們前麵看到的帶緩衝的讀取器一
// 樣的帶緩衝的寫入器。
w := bufio.NewWriter(f)
n4, err := w.WriteString("buffered\n")
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 的想法,就像我們已經看過的
# `stdin` 和 `stdout` 流。
課程導航
學習上一篇:Go語言教程:讀文件 學習下一篇:Go語言教程:行過濾器
相關資料
本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/writing-files