我知道围棋里有struct,但据我所知,你必须定义struct

type Circle struct{
    x,y,r float64
}

我想知道如何声明 struct 中不存在的新变量

circle := new(Circle)
circle.color = "black"

推荐答案

您需要使用映射(类型为map[string]interface{})来处理动态JSON.以下是创建新 map 的示例:

// Initial declaration
m := map[string]interface{}{
    "key": "value",
}

// Dynamically add a sub-map
m["sub"] = map[string]interface{}{
    "deepKey": "deepValue",
}

将JSON解组到映射中如下所示:

var f interface{}
err := json.Unmarshal(b, &f)

上面的代码将为您留下一个f中的 map ,其 struct 类似于:

f = map[string]interface{}{
    "Name": "Wednesday",
    "Age":  6,
    "Parents": []interface{}{
        "Gomez",
        "Morticia",
    },
}

您需要使用类型断言来访问它,否则Go不会知道它是一个映射:

m := f.(map[string]interface{})

您还需要在从映射中拉出的每个项目上使用断言或类型switch .处理非 struct 化JSON是一件麻烦事.

更多信息:

Go相关问答推荐

获取k8s群集作用域运算符的命名空间

如何使用我的 struct 化日志(log)记录格式使人panic ?

如何将文件从AWS S3存储桶复制到Azure BLOB存储

允许在 struct 中使用复合作为函数参数

使用Go使用Gorm使用外键对数据进行排序

如何执行asn 1 marshal/unmarshal和omit字段?

在整个SQL事务中将使用上下文作为默认设置吗?

在多个 struct 体中重用 Go 中的函数

无法在go中为docker容器写入有效的挂载路径

Opensearch 错误 ping 弹性服务器:由未知权威签署的 x509 证书

使用 Go Colly 抓取所有可能的标签并将它们放入一个变量中

如何从 Asterisk Manager Interface Event 获取活动呼叫数

在密钥不存在时处理 PATCH 部分更新

在 Go 模板中对照片使用随机 Int

未定义 protoc protoc-gen-go 时间戳

我如何解码 aes-256-cfb

无法访问 Go 模块导入的远程存储库

如何在 GORM 中获取字段值

无限期运行 Go routine (完成后重新启动)

如何在golang中使用ozzo验证进行时间最大验证