1 回答
TA贡献1866条经验 获得超5个赞
您可以定义实现sql.Scanner接口的切片类型。请注意,当您将实现 Scanner 的类型的实例传递给(*sql.Rows).Scanor调用时,将自动调用(*sql.Row).Scanimpelmenter 的方法。Scan
type EventUserList []*EventUser
func (list *EventUserList) Scan(src interface{}) error {
if data, ok := src.([]byte); ok && len(data) > 0 {
if err := json.Unmarshal(data, list); err != nil {
return err
}
}
return nil
}
然后,假设e."eventUsers"select 查询中的 是一个 json array,你可以像这样使用它:
// EventUser struct
type EventUser struct {
ID int64
CheckedIn bool
PaidAmount float32
}
// Event struct
type Event struct {
ID int64 `json:"id"`
Name string `json:"name"`
StartTime string `json:"startTime"`
EventUsers EventUserList `json:"eventUsers"`
}
// ...
var events []*Event
for rows.Next() {
e := new(Event)
if err := rows.Scan(&e.ID, &e.Name, &e.StartTime, &e.EventUsers); err != nil {
return err
}
events = append(events, e)
}
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报