Golang CSV Writer
Posted on Jun 12, 2018 in Go 程式設計 - 初階 by Amo Chen ‐ 1 min read
Golang 內建 CSV 的檔案處理功能,本篇介紹 csv.Writer
及簡單的使用範例。
csv.Writer 跟 csv.Reader 一樣是一個 struct ,該 struct 只定義 2 個屬性(field) ,分別為 Comma
以及 UseCRLF
。 Comma
設定 CSV 檔案的分隔符號,如果用 csv.NewWriter
取得這個 struct 時, Comma
會被自動設定為 ,
;而 UseCRLF
是個 boolean ,代表是否要使用 \r\n
作為斷行,用 csv.NewWriter
取得時預設是 true
代表用 \r\n
作為斷行:
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
fmt.Println(string(w.Comma))
fmt.Println(w.UseCRLF)
}
上述範例執行結果:
,
false
認識 csv.Writer
struct 之後,就能夠進一步認識 Write 函式,Wirte 函式每次只寫入一行,因此該函式接受 1 個 []string
作為傳入值, slice 中的每一個元素就是一個欄位的值。
例如:
package main
import (
"encoding/csv"
"os"
)
func main() {
records := [][]string{
{"Rob", "Pike", "rob"},
{"Ken", "Thompson", "ken"},
}
w := csv.NewWriter(os.Stdout)
for _, record := range records {
w.Write(record)
}
w.Flush()
}
上述範例執行結果為:
Rob,Pike,rob
Ken,Thompson,ken
值得注意的是 w.Flush()
會保證所有在 buffer 中的資料會被寫入,避免有些資料還存在 buffer 中,有興趣可以在 Go Playground 中試試沒有這行的效果。
除了 Write
函式之外,還有一個 WriteAll
函式,該函式如其名,一次寫入所有的行,所以該函式接受 [][]string
作為傳入值,同時會在執行寫入完成之後幫忙呼叫 Flush()
,如果沒有很大量的資料要一次寫入的話,可以考慮使用 WriteAll
,能夠少寫一行。
以上就是 csv.Writer
的介紹了。 Happy Coding!
References
https://golang.org/pkg/encoding/csv/#Writer.Write
https://golang.org/src/encoding/csv/writer.go?s=2606:2657#L103