golang超级mapper包 - coven

别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述golang超级mapper包 - coven相关的知识,希望能为你提供帮助。
coven介绍你可以把它理解成.NET 的 AutoMapper,java的modelmapper
【golang超级mapper包 - coven】一个快速的转换器去,支持结构到结构,切片到切片和映射到映射非反射转换,类型与嵌套指针支持。
不支持map到struct 和struct到map
速度非常快

  • 结构转换仅影响与源字段同名的目标字段,其余字段将保持不变。支持嵌套的匿名字段。
  • 映射转换仅会影响源映射具有的键的目标映射,其余的将保持不变。
  • 切片转换将覆盖整个目标切片。
  • 支持带有嵌套指针的type。
  • 除map转换外,请使用unsafe.pointer而不是reflect.Value进行转换。
安装
go get -u github.com/petersunbag/coven

用法
type foobar struct { D int } type Foo struct { A []int B map[int64][]byte C byte foobar }type Bar struct { A []*int B map[string]*string C *byte D int64 }var c, err = NewConverter(Bar{}, Foo{}) if err != nil { panic(err) }func demo(){ foo := Foo{[]int{1, 2, 3}, map[int64][]byte{1: []byte{\'a\', \'b\'}, 2: []byte{\'b\', \'a\'}, 3: []byte{\'c\', \'d\'}}, 6, foobar{11}} bar := Bar{} err := c.Convert(& bar, & foo) if err != nil { panic(err) } bytes, _ := json.Marshal(bar) fmt.Println(string(bytes)) }// Output: // {"A":[1,2,3],"B":{"1":"ab","2":"ba","3":"cd"},"C":6,"D":11}

性能
golang超级mapper包 - coven

文章图片

总结该包目前已经生产使用了一年多了,VO转换DTO转换BO PO等都非常方便。
如果觉得每次要使用NewConverter麻烦,可以自己封装下
var ( mutex sync.Mutex c_map= make(map[string]*coven.Converter) )func Map(src, dst interface{}) (err error) { key := fmt.Sprintf("%v_%v", reflect.TypeOf(src).String(), reflect.TypeOf(dst).String()) if _, ok := c_map[key]; !ok { mutex.Lock() defer mutex.Unlock() if c_map[key], err = coven.NewConverter(dst, src); err != nil { return } } if err =c_map[key].Convert(dst, src); err != nil { return } return }


    推荐阅读