type TestContent struct {
Id int
Content Content // 数据库中的 json 结构
type Content struct {
Name string
Age int
func (c *Content) Scan(value interface{}) error {
return json.Unmarshal(value.([]byte), c)
func (c *Content) Value() (driver.Value, error) {
return json.Marshal(c)
}
向数据库插入数据, 调用
Create
方法时报错了:
[2020-08-28 23:18:25] sql: converting argument $1 type: unsupported type main.Content, a struct
这这这, 什么鬼? 当时我百思不得其所. 经过多次尝试, 我发现将
Value
方法的从属从指针类型改为值类型就可以解决这个问题.
此时我恍然大悟, 想起了之前的方法集的概念.
指针类型拥有 值/指针 的方法
值类型只拥有值类型的方法
也就是说, go 在底层是使用值类型来调用的, 所以拿不到指针方法, 故而报错.
看到这里, 如果你也遇到同样的问题, 将
Value
方法从属改为值类型就可以解决了. 以下内容是我手贱之后的另一个愚蠢记录, 可跳过.