go同名字段复制工具函数(类似BeanUtils.copy)介绍和性能测试

介绍说明:

本文是在介绍一个go的不同类型结构体的复制工具函数,能减少重复劳动,提高开发效率,让代码可读性强,减少出错几率

本篇包含背景的介绍,工具函数源码的展示,性能测试等部分

问题背景:

故事的起因是看到了业务代码里有些字段比较多的部分,比如获取订单详情大概涉及到大几十个字段的复制,会有几十行甚至上百行的x.a = y.a这样的代码

 

即问题的根源是dto和vo是不同类型的结构题,但是又有很多同类型同名的公共字段需要复制(因结构体类型不同,无法直接copy出一份,只能挨个字段手动赋值)

解决方案:

由此想到了java里这种问题可以用beanUtils.copy方法解决,可以自动复制同名同类型字段的值

beanUtil是利用反射实现的,既然go也有反射,那么理论上也可以实现,就在网上找了下,果然有人写过了,很短:

代码:

func SimpleCopyProperties(dst, src interface{}) (err error) {
	// 防止意外panic
	defer func() {
		if e := recover(); e != nil {
			err = errors.New(fmt.Sprintf("%v", e))
		}
	}()

	dstType, dstValue := reflect.TypeOf(dst), reflect.ValueOf(dst)
	srcType, srcValue := reflect.TypeOf(src), reflect.ValueOf(src)

	// 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值