感谢大神提供的思路,使结构体实现Marshaler接口,在接口实现里把ID
属性值改为字符串,这样一来结构体序列化成的JSON结构中Uid
属性就是字符串了。
定义结构体
type Role struct {
ID int64 `gorm:"primary_key;comment:角色ID"`
CreatedAt time.Time `gorm:"autoCreateTime;comment:创建时间"`
UpdatedAt time.Time `gorm:"autoUpdateTime;comment:删除时间"`
DeletedAt gorm.DeletedAt `sql:"index;comment:修改时间"`
RoleName string `gorm:"not null;type:varchar(20);comment:角色名称"`
Menus []Menu `gorm:"many2many:role_menus;"`
}
实现接口(从而达到修改int64变量类型为string)
// MarshalJSON 实现序列化接口
func (role Role) MarshalJSON() ([]byte, error) {
fmt.Println("执行接口")
roleReturn := new(struct {
ID string
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt
RoleName string
Menus []Menu
})
roleReturn.ID = strconv.FormatInt(role.ID, 10)
roleReturn.CreatedAt = role.CreatedAt
roleReturn.UpdatedAt = role.UpdatedAt
roleReturn.DeletedAt = role.DeletedAt
roleReturn.RoleName = role.RoleName
roleReturn.Menus = role.Menus
return json.Marshal(roleReturn)
}
参考文献:
https://segmentfault.com/q/1010000015271859
https://www.jianshu.com/p/16f0c93ae731