生成
使用 encoding/csv
包
通过 csv.NewWriter 创建可写入对象
调用 Write 方法写入,最后调用 Flush 刷到文件中去
package main
import (
"encoding/csv"
"os"
)
func main() {
f, err := os.Create("test.csv")
if err != nil {
panic(err)
}
_, _ = f.WriteString("\xEF\xBB\xBF") //写入UTF-8 BOM 防止乱码
defer f.Close()
writer := csv.NewWriter(f)
_ = writer.Write([]string{"name", "age", "sex"})
_ = writer.Write([]string{"kiki", "29", "man"})
writer.Flush()
}
读取
通过 csv.NewReader 创建读取对象,设置 分隔符Comma,设置字段数量 FieldsPerRecor,调用 Read 逐行读取
FieldsPerRecord = -1 代表不进行字段数量验证,等于0 会设置成第一行的字段数量
FieldsPerRecord 的值大于0,则要求每一行的字段数量和该值匹配,否则会报错
open, err := os.Open("test.csv")
if err != nil {
log.Fatal(err)
}
defer open.Close()
reader := csv.NewReader(open)
reader.Comma = ','
reader.FieldsPerRecord = 0 //会自动设置成 3
for {
record, err := reader.Read()
if err != nil {
if err != io.EOF {
fmt.Println(err)
}
break
}
fmt.Println(record)
}