-3
I、次のコードを有する:追加データをマップする[文字列]インターフェイス{}
package main
import (
"sync"
"fmt"
)
var dataSet = struct {
sync.RWMutex
data map[string]interface{}
}{data: make(map[string]interface{})}
func main() {
dataSet.Lock()
defer dataSet.Unlock()
d := dataSet.data
test := []string{"one", "two", "three"}
m := map[string]int{
"one": 1,
"two": 2,
"three": 3,
}
for _, t := range test {
d["data"] = map[string]interface{}{
"test" : m["one"],
"more": 1,
t: map[string]int{
"lvl2": 2,
},
}
}
fmt.Println(dataSet.data["data"])
}
この可能ですか?
助けてくれてありがとう、私は上記のコードを更新しました。 私はむしろゴランの新人です。これらのネストマップのいくつかは混乱しています。
fmt.Println(dataSet.data["data"])
戻り
map[test:1 more:1 three:map[lvl2:2]]
は、どのように私はそれがすべて3つのマップであることを得るのですか?
fmt.Println(dataSet.data["data"].(map[string]interface{})["three"]
戻り
map[lvl2:2]
しかし
fmt.Println(dataSet.data["data"].(map[string]interface{})["three"]
戻り
<nil>
は、どのように私は、テストのすべての項目が追加されているのですか?
ありがとうございました!
最終的な解決策:https://play.golang.org/p/bRZXye649fY
package main
import (
"fmt"
"sync"
)
var dataSet = struct {
sync.RWMutex
data map[string]interface{}
}{data: make(map[string]interface{})}
func main() {
dataSet.Lock()
defer dataSet.Unlock()
d := dataSet.data
test := []string{"one", "two", "three"}
m := map[string]int{
"one": 1,
"two": 2,
"three": 3,
}
for i, t := range test {
dt := map[string]interface{}{
"test": m["one"],
"more": 1,
t: map[string]interface{}{
"i": i,
},
}
// If not set, just use it
if d["data"] == nil {
d["data"] = dt
continue
}
// Otherwise we want to merge new data in
dm := d["data"].(map[string]interface{})
for k, v := range dt {
dm[k] = v
}
}
fmt.Println(dataSet.data["data"].(map[string]interface{})["two"])
fmt.Println(dataSet.data["data"])
}
はい。やってみました?あなたはどんな問題に遭遇しましたか? – Adrian
申し訳ありませんが、実際のコードに似ているようにコードを更新しました。 – caboose0013
エラーは正確です。あなたはそのブロックがどんなタイプであるかを伝えなければなりません。たぶん 'map [string] interface {} {...}'? – Adrian