Mergo: merging Go structs and maps since 2013

译文:Mergo:自2013年起合并Go structs 和 maps

文档

安装

go get github.com/imdario/mergo

示例

package main

import (
"fmt"

"github.com/imdario/mergo"
)

type Student struct {
Name string
Age int
// 小写的
email string
}

// struct 转 map
func structToMap() {
student := Student{
Name: "Tom",
Age: 23,
email: "123@qq.com",
}

var m = make(map[string]interface{})

mergo.Map(&m, student)

fmt.Printf("m: %v\n", m)
// m: map[age:23 name:Tom]
}

// map 转 struct
func mapToStruct() {

var m = make(map[string]interface{})
m["name"] = "Tom"
m["age"] = 23
m["email"] = "123@qq.com"

student := Student{}

mergo.Map(&student, m)

fmt.Printf("student: %v\n", student)
// student: {Tom 23 }
}

func main() {
structToMap()
mapToStruct()
}

注意事项:

  • mergo 不会复制非导出字段
  • map 使用时候,对应的key字段默认是小写的
  • mergo 可以嵌套赋值

参考
​​​好用的map-struct转换库 mergo​