golang使用 copier对象复制时进行类型转化

问题描述

在后端我们经常会在 entity 和 view 之间进行复制转换为可以发送给前端的数据

比如 time 对象在下送的时候,我们希望能显示经过格式化过的目标字符串格式,这里我们可以使用自定义的 converter,主要是定义 src 和 dst 类型,以及实现转换方法。

然后在复制的时候带上自定义 converter 即可,极大的提高了转换复制的效率。

func main() {
	var (
		user = User{Name: "Jinzhu", Age: 18, Role: "Admin", Salary: 200000, CreateAt: time.Now()}
		//users     = []User{{Name: "Jinzhu", Age: 18, Role: "Admin", Salary: 100000}, {Name: "jinzhu 2", Age: 30, Role: "Dev", Salary: 60000}}
		employee = Employee{Salary: 150000}
		//employees = []Employee{}
	)

	converter := copier.TypeConverter{
		SrcType: time.Time{},
		DstType: copier.String,
		Fn: func(src interface{}) (dst interface{}, err error) {
			srcTime, ok := src.(time.Time)
			fmt.Println(srcTime)
			if !ok {
				return "", nil
			}
			return srcTime.Format(time.RFC3339), nil
		}}
	copier.CopyWithOption(&employee, &user, copier.Option{
		Converters: []copier.TypeConverter{converter}},
	)

	fmt.Printf("%#v \n", employee)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值