这似乎是一个常见问题,可能已经在某个地方发布了,但我找不到任何讨论它的线程,所以这里是问题:我有一个存储类型列的 Postgres 表BYTEA。CREATE TABLE foo ( id VARCHAR PRIMARY KEY, json_data BYTEA)该列json_data实际上只是 JSON 存储为BYTEA(我知道这并不理想)。它是非结构化的,但保证是string -> stringJSON。当我查询此表时,我需要将查询扫描SELECT * FROM foo WHERE id = $1到以下结构中:type JSONData map[string]stringtype Foo struct { ID string `db:"id"` Data JSONData `db:"json_data"`}我正在使用sqlx的Get方法。当我执行查询时,我收到错误消息sql: Scan error on column index 1, name "json_data": unsupported Scan, storing driver.Value type []uint8 into type *foo.JSONData。显然,扫描器无法将 JSON 扫描BYTEA到地图中。我可以实现我自己的扫描仪并在列上调用我的自定义扫描仪json_data,但我想知道是否有更好的方法来做到这一点。我的JSONData类型可以实现现有接口来自动执行此操作吗?
1 回答

www说
TA贡献1775条经验 获得超8个赞
正如@iLoveReflection 所建议的那样,在工作中实现Scanner接口*JSONData。这是实际的实现:
func (j *JSONData) Scan(src interface{}) error {
b, ok := src.([]byte)
if !ok {
return errors.New("invalid data type")
}
return json.Unmarshal(b, j)
}
- 1 回答
- 0 关注
- 124 浏览
添加回答
举报
0/150
提交
取消