2 回答
TA贡献1817条经验 获得超6个赞
的字段(内部)sync.Map
不会导出,因此无法访问,更重要的是,如果不同步则无法访问。所以你不能只打印sync.Map
.
您可以做的是迭代 的所有条目sync.Map
,从中构建一个“普通”地图,然后显示它。请注意,“普通”映射必须具有string
键类型(interface{}
该包不支持具有键类型的映射encoding/json
)。我们可以简单地将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"
}
}
TA贡献1802条经验 获得超6个赞
这是一个简单的 util 函数(您可以根据需要对其进行修改):
// print map's key/value, with index (not stable),
func PrintSyncMap(m sync.Map) {
// print map,
fmt.Println("map content:")
i := 0
m.Range(func(key, value interface{}) bool {
fmt.Printf("\t[%d] key: %v, value: %v\n", i, key, value)
i++
return true
})
}
输出示例:
map content:
[0] key: Qian, value: class 2
[1] key: Zhao, value: class 1
[2] key: Li, value: class 4
尖端:
指数不稳定。(又名。打印项目的顺序可能会在多次调用中发生变化。)
- 2 回答
- 0 关注
- 108 浏览
添加回答
举报