我可以将2个csv列连接到一个带Go CSV的结构成员吗?
CSV格式是这样的。
colA, date, time, colB
A1, 2017-04-14, 09:50:10, B1
A2, 2017-04-14, 09:50:20, B2
我想将此CSV映射到结构
type MyStruct struct {
ColA string `csv:"colA"`
DateTime string // <- like "2017-04-14 09:50:10"
ColB string `csv:"colB"`
}
如何使用Go CSV或Go中的其他方式执行此操作?
答案 0 :(得分:1)
(a)我认为没有一种支持的方法可以做到这一点。但是,可以实现将字段合并到一起的自定义阅读器。相当专有,我不推荐它。
(b)为什么不简单地向MyStruct添加一个返回合并值的方法?
type MyStruct struct {
ColA string `csv:"colA"`
ColB string `csv:"colB"`
ColC string `csv:"colC"`
}
func (m MyStruct) dateTime() string {
return ColB+ColC
}
(c)在解析之前,可能会使用一些shell-fu来预处理CSV?
答案 1 :(得分:0)
csvutil 中的第一个示例是否回答/解决了这个问题?
var csvInput = []byte(`
name,age,CreatedAt
jacek,26,2012-04-01T15:00:00Z
john,,0001-01-01T00:00:00Z`,
)
type User struct {
Name string `csv:"name"`
Age int `csv:"age,omitempty"`
CreatedAt time.Time
}
var users []User
if err := csvutil.Unmarshal(csvInput, &users); err != nil {
fmt.Println("error:", err)
}
for _, u := range users {
fmt.Printf("%+v\n", u)
}
// Output:
// {Name:jacek Age:26 CreatedAt:2012-04-01 15:00:00 +0000 UTC}
// {Name:john Age:0 CreatedAt:0001-01-01 00:00:00 +0000 UTC}