为了账号安全,请及时绑定邮箱和手机立即绑定

使用 GORM golang 持久化自定义集数据类型

使用 GORM golang 持久化自定义集数据类型

Go
皈依舞 2022-05-23 17:49:48
我Set在 go 中创建了一个自定义数据类型,我用它来定义一对多关系。例如在我的架构中,我有以下结构定义type Doctor struct {  firstName string  lastName string  capabilities commons.Set }这capabilities是一组具有以下值的字符串chat, audio, video,通过此设置,我试图将上述结构保留到MySQL使用GORM库中,但是当我这样做时,出现以下错误panic: invalid sql type Set (interface) for mysqlgoroutine 6 [running]:catalog/vendor/github.com/jinzhu/gorm.(*mysql).DataTypeOf(0xc00027e8a0, 0xc00024d680, 0x8, 0x8)    /home/kumard/go/src/catalog/vendor/github.com/jinzhu/gorm/dialect_mysql.go:123 +0xce9catalog/vendor/github.com/jinzhu/gorm.(*Scope).createTable(0xc000169400, 0xc14e60)我知道我必须实现某些方法才能实现这一点,但我无法确定要在此处实现哪个方法/回调。
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

您需要为自定义类型实现Scanner & Driver Valuer接口,然后数据库驱动程序才能知道如何将数据存储在数据库中以及如何从数据库中获取数据。


func (data *CustomType) Value() (driver.Value, error) {

    ...

}

func (data *CustomType) Scan(value interface{}) error {

    ...

}

示例:假设 UserAccess 是map[interface{}]struct{}类型。


type UserAccess map[interface{}]struct{}


func (data *UserAccess) Value() (driver.Value, error) {

    return data.ConvertJSONToString(), nil

}

func (data *UserAccess) Scan(value interface{}) error {

    *data = data.ConvertStringToJson(valueString)

}

这里用于将自定义数据类型值转换为数据库兼容类型,如 json-string ConvertStringToJson。ConvertJSONToString


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号