Golang CSV Writer

Posted on  Jun 12, 2018  in  Go 程式設計 - 初階  by  Amo Chen  ‐ 1 min read

Golang 內建 CSV 的檔案處理功能,本篇介紹 csv.Writer 及簡單的使用範例。

csv.Writercsv.Reader 一樣是一個 struct ,該 struct 只定義 2 個屬性(field) ,分別為 Comma 以及 UseCRLFComma 設定 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

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!