如何用Go创建含动态应用名-版本键值对的嵌套结构体?
解决Go中动态键值对结构体的问题
我明白你想要构建一个包含固定名称和动态应用名-版本键值对的结构,之前用切片的方式没法实现键值对的效果,咱们换用map类型就能完美解决啦!
正确的结构体定义
你需要把Applications字段定义为map[string]string类型(键是应用名字符串,值是版本字符串),这样就能支持动态的键值对了:
type Final struct { Name string `json:"Name"` Applications map[string]string `json:""` // 如果JSON需要直接嵌套应用键值对,就用空tag;如果要包裹在"Applications"下,改成`json:"Applications"` }
调整GetApps函数返回值
让GetApps返回map[string]string类型,这样就能直接赋值给Applications字段了,示例如下:
func GetApps() map[string]string { // 这里可以是动态生成的应用列表,比如从配置/数据库获取 return map[string]string{ "App1": "Version1", "App2": "Version2", } }
初始化结构体实例
现在你可以轻松初始化想要的结构了:
final := Final{ Name: "Test", Applications: GetApps(), }
验证输出
如果你打印这个结构体,会得到类似你想要的格式:
{Name:Test Applications:map[App1:Version1 App2:Version2]}
如果需要JSON序列化,结果会是:
{"Name":"Test","App1":"Version1","App2":"Version2"}
(如果把Applications的tag改成json:"Applications",JSON会变成{"Name":"Test","Applications":{"App1":"Version1","App2":"Version2"}},根据你的需求调整即可)
内容的提问来源于stack exchange,提问作者sneha nair
相关产品推荐
相关产品推荐

