Go返回int64类型字段超出javascript Number范围的解决方法

感谢大神提供的思路,使结构体实现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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值