Gorm中SQLite使用JSON对比MySQL

544 阅读1分钟

今天在使用Gorm时,操作SQLite中的JSON字段老是出现错误: json interface conversion: interface {} is string, not []uint8

原因就是Gorm的value与scan函数。一开始我参考的mysql的。在scan函数中,这两者的json还是有差别的,sqlite的json不是[]byte,而是string,所以,正确的写法如下:

// 实现json接口

func (c YourJsonType) Value() (driver.Value, error) {

b, err := json.Marshal(c)

return string(b), err

}

  


func (c *YourJsonType) Scan(src any) error {

return json.Unmarshal([]byte(src.(string)), c)

}