go 生成器讀取csv檔案
阿新 • • 發佈:2022-03-09
package main import ( "encoding/csv" "fmt" "io" "os" ) func readCsvYield(fPath string) chan map[string]string { var yield chan map[string]string yield = make(chan map[string]string) var resDict map[string]string resDict = make(map[string]string) go func() { file, err := os.Open(fPath) if err != nil { close(yield) fmt.Println(err) } defer file.Close() reader := csv.NewReader(file) totalRows := -1 var keys []string for { row, err := reader.Read() if err != nil && err != io.EOF { fmt.Printf("can not read , err is %s", err) close(yield) } if err == io.EOF { close(yield) break } if totalRows == -1 { keys = append(keys, row...) totalRows += 1 continue } for idx, item := range row { resDict[keys[idx]] = item } totalRows += 1 yield <- resDict resDict = make(map[string]string) } }() return yield } func main() { //fileName := "/data/appdeploy/dwy/ent_info_base.csv" fileName := "D:\\tmp\\in.csv" for line := range readCsvYield(fileName) { fmt.Println(line) } }