前言
今天遇到了一个 bug, 是 golang 的orm导致的. 使用了gorm框架. 通过实现Scan与Value可以将数据库中的 json 内容解析出来, 免除了 字符串再解码的步骤....当时报错的代码大概是这样的:
type TestContent struct {
Id int
Content Content // 数据库中的 json 结构
}
type Content struct...value.([]byte), c)
}
func (c *Content) Value() (driver.Value, error) {
return json.Marshal(c)
}
向数据库插入数据...使用值类型是无法对其字段进行修改的, 其修改通通是通过值复制进行, 并不会影响原始对象. 而且我右打了断点发现, 方法并不是没有调, 确实是调用了, 只不过因为从属与值而没有对原始对象造成影响....我回想了一下, 当时正确的检查步骤应该是:
在Scan方法内打断点, 查看是否调用了方法以及两次调用传的参数是否一致
当发现调用方法且参数一致时, 就直接到了最后一步并最终找到指针的问题
若没有调用方法或参数不一致时