2 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
的字段(內(nèi)部)sync.Map
不會(huì)導(dǎo)出,因此無(wú)法訪問,更重要的是,如果不同步則無(wú)法訪問。所以你不能只打印sync.Map
.
您可以做的是迭代 的所有條目sync.Map
,從中構(gòu)建一個(gè)“普通”地圖,然后顯示它。請(qǐng)注意,“普通”映射必須具有string
鍵類型(interface{}
該包不支持具有鍵類型的映射encoding/json
)。我們可以簡(jiǎn)單地將interface{}
密鑰轉(zhuǎn)換為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貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是一個(gè)簡(jiǎn)單的 util 函數(shù)(您可以根據(jù)需要對(duì)其進(jìn)行修改):
// 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
尖端:
指數(shù)不穩(wěn)定。(又名。打印項(xiàng)目的順序可能會(huì)在多次調(diào)用中發(fā)生變化。)
- 2 回答
- 0 關(guān)注
- 165 瀏覽
添加回答
舉報(bào)