copier package - github.com/jinzhu/copier - Go Packages

方便的 Clone 机制

copier 能够 copy 不同对象的同名同类型属性,甚至可以设置忽略大小写、深/浅拷贝。对于intint32int64的同名属性,copier 认为是一致的,对于struct*struct,也认为是一致的,下面的 clone 操作是可行的:

type Child struct {
	Val int
}

type A struct {
	Number int32
	Kid Child
	Kids []Child
}

type B struct {
	Number int64
	Kid *Child
	Kids []*Child
}

func main() {
	var a A = A{}
	var b B = B{}
	copier.Copy(&b, &a)
}

注意 expose 属性

小写开头的属性是包私有的,对于 copier 不可见