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 可以嵌套赋值
参考