当前位置: 首页 > news >正文

Gorm自定义数据类型

参考官网 https://gorm.io/zh_CN/docs/data_types.html

现在有个需求是,数据库存了用户解锁的头像数组,每次都要json序列化和反序列化.之前是给Avatar结构体写了两个方法,发现太麻烦了

Scan和Value分别对应读取和存储。同理,可以扩展其他类型,比如时间

package domainimport ("database/sql/driver""encoding/json""errors"
)// AvatarListJSON 自定义int切片类型,用于数据库JSON字段的自动序列化和反序列化
type AvatarListJSON []int// Scan 实现sql.Scanner接口,从数据库读取JSON数据并转换为AvatarListJSON
func (al *AvatarListJSON) Scan(value interface{}) error {bytes, ok := value.([]byte)if !ok {return errors.New("invalid type for AvatarListJSON")}if len(bytes) == 0 {*al = []int{}return nil}var temp []intif err := json.Unmarshal(bytes, &temp); err != nil {return err}*al = AvatarListJSON(temp)return nil
}// Value 实现driver.Valuer接口,将AvatarListJSON转换为JSON字符串存储到数据库
func (al AvatarListJSON) Value() (driver.Value, error) {if len(al) == 0 {return "[]", nil}bytes, err := json.Marshal(al)if err != nil {return nil, err}return string(bytes), nil
}// Avatar 头像结构体
type Avatar struct {ID     int64          `gorm:"primaryKey" json:"id"`UID    int            `gorm:"index" json:"uid"`              // 所属用户Avatar AvatarListJSON `gorm:"column:avatar" json:"avatar"`  // 头像id列表,JSON格式存储
}func (*Avatar) TableName() string {return "avatar"
}
http://www.rkmt.cn/news/1413.html

相关文章:

  • PHP流量控制令牌桶算法
  • 顽固文件夹无法删除?
  • c++ std::map
  • 软考架构备考-面向对象
  • 【Python】Word文档解析表格并导出Excel
  • 2025.9.9 总结
  • 2025 9 6 总结
  • OLE读取EXCEL内容
  • Rope pbds
  • 25.9.8随笔联考总结
  • IT 失业人员的福音:借微软 Dynamics 365 CRM 与 Power Platform 快速重启职业生涯
  • 测试
  • 0124_观察者模式(Observer)
  • 洛谷P5854 【模板】笛卡尔树 题解 笛卡尔树模板题
  • 都江堰操作系统
  • [OLAP/Doris] Doris 之表设计
  • 20250909 之所思 - 人生如梦
  • 认识人工智能-基础认知
  • 苹果im虚拟机协议群发系统,苹果imessage推信软件,苹果iMessage自动群发协议–持续更新中...
  • 课前问题思考1
  • huggingface
  • 从0到1实现Transformer模型-CS336作业1
  • Morpheus 审计报告分享:AAVE 项目 Pool 合约地址更新导致的组合性风险
  • U3D动作游戏开发读书笔记--2.1一些通用的预备知识
  • Word中VBA提取人名所在的页码
  • ARC
  • Ubuntu 安装 Git
  • systemctl命令
  • 知识蒸馏
  • 第一次学dij qwq(p4779