1 回答
TA贡献1829条经验 获得超4个赞
你可以让你的metas结构实现sql.Scanner接口
它应该是这样的:
func (m *metas) Scan(src interface{}) error {
strValue, ok := src.(string)
if !ok {
return fmt.Errorf("metas field must be a string, got %T instead", src)
}
return json.Unmarshal([]byte(strValue), m)
}
之后,您可以将其用作InfoClip字段并将其直接传递给Scan并删除decodeJsonSql:
type InfoClip struct {
// [...]
Metas metas `json:metas`
// [...]
}
和
q := "SELECT c.id AS clipId, c.streamUrl, c.startTimecode, c.endTimecode, c.createdAt, s.metas,... FROM clips WHERE c.id = ?"
row := datab.QueryRow(q, mediaId)
clips := InfoClip{}
err := row.Scan(&clips.ClipId, &clips.StreamUrl, &clips.StartTimeCode, &clips.EndTimeCode, &clips.CreatedAt, &clips.Metas) // [...]
if err != nil {
fmt.Printf("SQL Err: %s", err)
return err
}
(顺便说一句,你可以看到,我换成datab.Query与datab.QueryRow你期待只有一个结果)
- 1 回答
- 0 关注
- 203 浏览
添加回答
举报