有没有像sql这样的东西.NullJson 类似于 sql.NullString in golang?



我正在使用golang从postgres查询,其中一个字段包含有时可以NULLjson

喜欢这个

row := db.QueryRow(
"select my_string, my_json from my_table where my_string = $1",
my_id)

var my_string sql.NullString
var myjson MyJsonStruct
err := row.Scan(&my_string2, &myjson)

但我正在得到

sql: Scan error on column index 2, name "my_json": unsupported Scan, storing driver.Value type <nil> into type *main.MyJsonStruct

我检查了https://godoc.org/database/sql但没有找到sql.NullJson处理这种情况的方法是什么?

不,没有sql.json。我认为在数据库中处理 json 列的最佳方法是实现评估器和扫描器。所以像这样:

// Scan implements database/sql.Scanner interface
func (m *MyJsonStruct) Scan(src interface{}) error {
if src == nil {
return nil
}
data, ok := src.([]byte)
if !ok {
return errors.New("type assertion to []byte failed")
}
var myJsonStruct MyJsonStruct
if err := json.Unmarshal(data, &myJsonStruct); err != nil {
return fmt.Errorf("unmarshal myJsonStruct: %w", err)
}
*m = myJsonStruct
return nil
}
// Value implements database/sql/driver.Valuer interface
func (m MyJsonStruct) Value() (driver.Value, error) {
data, err := json.Marshal(m)
if err != nil {
return nil, fmt.Errorf("marshal myJsonStruct: %w", err)
}
return data, nil
}

最新更新