问题:
如何高效地将 CSV 记录反序列化为 Go 结构?
问题陈述:
假设你有一个自定义的 Go 结构测试,包含“姓名”、“姓氏”和“年龄”字段。您有一个 CSV 文件,其中包含以下格式的记录:
John;Smith;42 Piter;Abel;50
如何自动将这些记录解组到测试结构的实例中,而不依赖于手动反序列化操作?
答案:
为了简化反序列化过程,可以考虑使用 gocarina/gocsv 图书馆。 gocsv 提供与encoding/json 包类似的功能,但专门针对 CSV 数据。
这是一个使用 gocsv 的示例:
package main import ( "fmt" "log" "os" "github.com/gocarina/gocsv" ) type Test struct { Name string `csv:"Name"` Surname string `csv:"Surname"` Age int `csv:"Age"` } func main() { // Open CSV file for reading in, err := os.Open("test.csv") if err != nil { log.Fatal(err) } defer in.Close() // Declare a slice to hold the Test structures var tests []Test // Unmarshal the CSV records into the Test structures if err := gocsv.UnmarshalFile(in, &tests); err != nil { log.Fatal(err) } // Print the unmarshaled data for _, test := range tests { fmt.Printf("Name: %s, Surname: %s, Age: %d\n", test.Name, test.Surname, test.Age) } }
在此示例中,gocsv 为您处理反序列化过程,简化 CSV 记录到 Go 结构的转换。您可以在测试结构中使用自定义字段标签来指定每个字段的 CSV 列标题,以确保准确的映射。
以上是如何高效地将CSV数据反序列化为Go结构?的详细内容。更多信息请关注PHP中文网其他相关文章!