当前位置: 首页 > 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.hskmm.com/?act=detail&tid=590

相关文章:

  • AI GEO领域发展机遇大
  • PHP流量控制令牌桶算法
  • TIA博图的三种视图
  • 数据结构与算法-21.优先队列
  • 顽固文件夹无法删除?
  • 普科科技 PKC7030 高频电流探头调零指南
  • 智能CRM赋能饮料行业:纷享销客快消品全场景数字化解决方案
  • c++ std::map
  • 调一调
  • 【稳定检索|线上线下参会|马理工主办】第十一届建筑、土木与水利工程国际学术会议(ICACHE 2025)
  • 软考架构备考-面向对象
  • 在AI技术快速实现创意的时代,挖掘真实需求成为核心竞争力——某知名实时语音转录系统需求洞察
  • 多版本jdk环境下,指定jdk版本执行jar文件
  • 【Python】Word文档解析表格并导出Excel
  • 海明码破解指南:从让人头疼的软考题到内存背后的无名英雄
  • 2025.9.9 总结
  • 基于Python+Vue开发的医院门诊预约挂号系统源码+运行
  • 2025 9 6 总结
  • 2025.9.8 总结
  • OLE读取EXCEL内容
  • 第5篇、 Kafka 数据可靠性与容错机制
  • Shell符号详解
  • Dynamics 365 CRM + Power Platform 技术顾问:解锁 IT 高薪赛道,长沙爱码士 IT 助你全程通关
  • Rope pbds
  • 295、嫦娥
  • 25.9.8随笔联考总结
  • rmrs 题解
  • IT 失业人员的福音:借微软 Dynamics 365 CRM 与 Power Platform 快速重启职业生涯
  • qoj10096 Generating Random Trees
  • 测试