• golang超级mapper包


    coven介绍

    你可以把它理解成.NET 的 AutoMapper,java的modelmapper

    一个快速的转换器去,支持结构到结构,切片到切片和映射到映射非反射转换,类型与嵌套指针支持。
    不支持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}
    

    性能

    总结

    该包目前已经生产使用了一年多了,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
    }
    
  • 相关阅读:
    阶段一Python核心编程:流程控制之条件语句004
    阶段一Python核心编程:输入、转换数据类型、运算符003
    Linux在线测网速
    SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)
    SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱
    oracle归档的开启与关闭
    tmux的使用
    linux下获取占用CPU资源最多的10个进程
    oracle11g安装
    redis学习2
  • 原文地址:https://www.cnblogs.com/kingreatwill/p/12577086.html
Copyright © 2020-2023  润新知