I (golang newbie) пытаюсь создать карту [string] interfaces {} в функции. Код компилируется и запускается, но карта пуста.Q: golang pointer to map [string] interface {}
package main
import (
"fmt"
"encoding/json"
)
func main() {
var f interface{}
var sJson string // JSON string from VT
var err error // errors
var b []byte // bytearray of JSON string
var rootMap map[string]interface{}
rootMap = make(map[string]interface{})
sJson=`{"key": "foo"}`
fmt.Println(sJson)
err = json2map(&b, &sJson, f, rootMap)
if err != nil { return }
switch v := rootMap["key"].(type) {
case float64:
fmt.Printf("Value: %d",v)
case string:
fmt.Printf("Value: %s", v)
case nil:
fmt.Println("key is nil")
default:
fmt.Println("type is unknown")
}
}
func json2map(b *[]byte, sJson *string, f interface{}, myMap map[string]interface{}) error {
var err error
*b = []byte(*sJson)
err = json.Unmarshal(*b,&f)
myMap = f.(map[string]interface{})
return err
}
Выход:
{"key": "foo"}
key is nil
Я нашел this article, который описывает, как использовать карту [строка] строку. Этот код работает, как ожидалось:
package main
import (
"fmt"
)
type MyType struct {
Value1 int
Value2 string
}
func main() {
myMap := make(map[string]string)
myMap["key"] = "foo"
ChangeMyMap(myMap)
fmt.Printf("Value : %s\n", myMap["key"])
}
func ChangeMyMap(TheMap map[string]string) {
TheMap["key"] = "bar"
}
Так что я думаю, что моя проблема связана с картой существа типа интерфейса вместо строки, но я не могу сказать, почему первый код не работает, а второй делает.
Большое спасибо !!! Это помогло мне решить проблему! (Тем не менее, я до сих пор не понимаю, почему мой другой код не работает, но я надеюсь, что я пойму, что как только я больше не буду новичком в golang.) – user208383
@ user208383: Вы, кажется, спотыкаетесь как указатели работают больше, чем Go специально. Попробуйте выполнить [Tour Of Go] (http://tour.golang.org/welcome/1), в котором есть примеры, которые могут вам помочь. – JimB