相关文章推荐
没有腹肌的墨镜  ·  C# winform ...·  2 年前    · 
玩命的奔马  ·  nodejs consuming 100 ...·  2 年前    · 
捣蛋的手术刀  ·  Java ...·  2 年前    · 
爱健身的灭火器  ·  CVPR 2023 ...·  2 年前    · 

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