gpt4 book ai didi

dictionary - 如何漂亮地打印同步 map 的内容

转载 作者:行者123 更新时间:2023-12-01 22:08:48 30 4
gpt4 key购买 nike

我想在Go中漂亮地打印同步映射的内容。
我有一个sync.Map data我想打印它的内容。

要查看特定键SiteData的值,我可以运行以下代码。

var data sync.Map
siteData := map[string]string{"Name": "StackOverflow"}
data.Store("SiteData", siteData)
temp, _ := data.Load("SiteData")
b, _ := json.MarshalIndent(temp, "", " ")
fmt.Println(string(b))

但是我希望立即打印整个 map 。这是因为 data可以有很多键,我想一次打印它们。

运行以下代码不起作用,并显示 {}
var data sync.Map
siteData := map[string]string{"Name": "StackOverflow"}
data.Store("SiteData", siteData)
b, _ := json.MarshalIndent(data, "", " ")
fmt.Println(string(b))

最佳答案

sync.Map 的字段(内部)不会导出,因此无法访问它们,更重要的是,没有同步就无法访问它们。因此,您不能只打印sync.Map的内容。

您可以做的是遍历sync.Map的所有条目,从中构建一个“普通” map ,然后显示出来。请注意,“普通”映射必须具有string key 类型( interface{} 软件包不支持具有encoding/json key 类型的映射)。我们可以简单地使用 interface{} string键转换为fmt.Sprint()。要获取所有条目,可以使用 Map.Range()

例如:

var data sync.Map
data.Store("SiteData", map[string]string{
"Name": "StackOverflow",
"Url": "https://so.com",
})
data.Store("Else", "something else")

m := map[string]interface{}{}
data.Range(func(key, value interface{}) bool {
m[fmt.Sprint(key)] = value
return true
})

b, err := json.MarshalIndent(m, "", " ")
if err != nil {
panic(err)
}
fmt.Println(string(b))

这将输出(在 Go Playground上尝试):
{
"Else": "something else",
"SiteData": {
"Name": "StackOverflow",
"Url": "https://so.com"
}
}

关于dictionary - 如何漂亮地打印同步 map 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58995416/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com