-3
나는 다음과 같은 코드가 있습니다추가 데이터를 매핑하는 [문자열] 인터페이스 {}
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