我正在使用 go 通道做我的第一步,并尝试编写下面的代码,我想使用从给定 csv 文件读取的 goroutine 执行以下操作,将读取记录发送到另一个添加相同记录的通道到另一个 csv 文件:
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"log"
"os"
)
func failOnError(err error) {
if err != nil {
log.Fatal("Error:", err)
panic(err)
}
}
func main() {
read := make(chan Data)
go func(input_file string) {
var data Data
fr, err := os.Open(input_file)
failOnError(err)
defer fr.Close()
r := csv.NewReader(fr)
rows, err := r.ReadAll()
failOnError(err)
data.header = rows[0]
for _, row := range rows[1:] {
data.lines = append(data.lines, Person{
Firstname: row[0],
Lastname: row[1],
Address: &Address{
City: row[2],
State: row[3],
},
})
}
peopleJson, _ := json.Marshal(data.lines)
fmt.Println(string(peopleJson)) // This is working smoothly
read <- data
}("people.csv")
csvOut, err := os.Create("resultsfile.csv")
if err != nil {
log.Fatal("Unable to open output")
}
out := make(chan int)
select {
case data := <-read:
go func(data Data) {
println("data received") // <-- Not show up
w := csv.NewWriter(csvOut)
defer csvOut.Close()
// handle header
data.header = append(data.header, "score")
if err = w.Write(data.header); err != nil {
log.Fatal(err)
}
/*
hanlde data
*/
w.Flush()
out <- 0
}(data)
case _ = <-out:
println("done")
}
}
type Person struct {
Firstname string `json:"firstname"` // JSON annotation will allow for easy printing to JSON after it had been loaded
Lastname string `json:"lastname"`
Address *Address `json:"address,omitempty"`
}
慕姐8265434
相关分类