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结构体的实现。