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結構體的實現。