go語言寫入文件的六種方式

 閱讀大約需要1分鐘

go語言寫入文件的六種方式

writefile.go代碼如下:

package main

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
)

func main() {
	s := []byte("Data to write\n")
	f1, err := os.Create("f1.txt")
	if err != nil {
		fmt.Println("Cannot create file", err)
		return
	}
	defer f1.Close()
	fmt.Fprintf(f1, string(s))

	f2, err := os.Create("f2.txt")
	if err != nil {
		fmt.Println("Cannot create file", err)
		return
	}
	defer f2.Close()
	n, err := f2.WriteString(string(s))
	fmt.Printf("wrote %d bytes\n", n)

	f3, err := os.Create("f3.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	w := bufio.NewWriter(f3)
	n, err = w.WriteString(string(s))
	fmt.Printf("wrote %d bytes\n", n)
	w.Flush()
	f3.Close()

	f4 := "f4.txt"
	err = ioutil.WriteFile(f4, s, 0644)
	if err != nil {
		fmt.Println(err)
		return
	}

	f5, err := os.Create("f5.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	n, err = io.WriteString(f5, string(s))
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("wrote %d bytes\n", n)

	f6, err := os.Create("f6.txt")
	if err != nil {
		fmt.Println("Cannot create file", err)
		return
	}
	defer f6.Close()
	n, err = f6.Write(s)
	fmt.Printf("wrote %d bytes\n", n)
}

編譯文件

go build writefile.go

執行

./writefile

其中f2.WriteString是把字符串轉換成字節數據,之後調用和f6.Write(s)相同的方法。

ioutil.WriteFile(f4, s, 0644)是先打開文件,然後調用和f6.Write(s)相同的方法 寫入文件

f5調用了Writer interface的方法,根據調用的結構體來決定取用哪一個實現,當然上面的代碼中取用的是File結構體的實現, 所以f2,f5,f6在上述代碼中實際調用的方法是同一個。

f3是帶緩存的*Writer,是Writer結構體的實現。