为了账号安全,请及时绑定邮箱和手机立即绑定

问:golang 指向 map[string]interface{} 的指针

问:golang 指向 map[string]interface{} 的指针

Go
人到中年有点甜 2021-11-22 18:48:30
我(golang 新手)正在尝试在函数中创建一个 map[string]interfaces{}。代码编译并运行,但地图为空。package mainimport (    "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我发现这篇文章描述了如何使用 map[string]string。此代码按预期工作:package mainimport (    "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"}所以我认为我的问题与 map 是 interface 而不是 string 类型有关,但我不知道为什么第一个代码不起作用,而第二个代码起作用。
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

这里有很多事情会引起混乱:

  • 你根本不需要b。您正在传递一个指向您在函数内重新分配的字节切片的指针。直接使用字符串即可。

  • 我们不需要指向sJson字符串的指针。字符串是不可变的,您不会尝试重新分配sJson变量。

  • 您正在解组到一个空接口,然后尝试将myMap变量重新分配给f. 由于myMap不是指针,该赋值仅作用于函数内。直接解组就可以了myMap

如果您更改这些内容,您会发现该json2map函数最终只有一行,并且可以完全删除:

func json2map(sJson string, myMap map[string]interface{}) error {
    return json.Unmarshal([]byte(sJson), &myMap)
    }


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信