1 回答

TA貢獻1995條經驗 獲得超2個贊
現在看看你的循環:
var key string
var value interface{}
for k, v := range mp {
switch k {
case "type":
key = v.(string)
case "properties":
value = v
case "connected":
if collection, ok := v.([]interface{}); ok {
for _, c := range collection {
for nk, nv := range keyValuePairs(c) {
nnv, _ := nv.(map[string]interface{})
_, ok := nnv["connectedTo"]
if !ok {
nnv["connectedTo"] = key
}
kvs[nk] = nv
}
}
}
default:
for nk, nv := range keyValuePairs(v) {
kvs[nk] = nv
}
}
}
您正在分支中使用key變量,但是達到和"connected"的順序是不確定的(隨機的)。"type""connected"
"type"分支是設置的key,但如果"connected"先到達,則為key空。
您不能依賴地圖迭代順序。
一個簡單的解決方法是在循環之前"type"首先獲取與first 關聯的值并將其分配給key(您在"connected"分支中使用的值) 。
例如:
key, _ := mp["type"].(string)
value := mp["properties"]
// Now process other properties:
for k, v := range mp {
switch k {
case "type", "properties": // Already handled
case "connected":
if collection, ok := v.([]interface{}); ok {
for _, c := range collection {
for nk, nv := range keyValuePairs(c) {
nnv, _ := nv.(map[string]interface{})
_, ok := nnv["connectedTo"]
if !ok {
nnv["connectedTo"] = key
}
kvs[nk] = nv
}
}
}
default:
for nk, nv := range keyValuePairs(v) {
kvs[nk] = nv
}
}
}
- 1 回答
- 0 關注
- 103 瀏覽
添加回答
舉報