Golang中国
func main() {

    m := make(map[string]interface{})
    a := 1
    m["a"] = &a
    fmt.Println(*m["a"])

}

运行报错

# command-line-arguments
./main.go:22: invalid indirect of m["a"] (type interface {})

小弟实在不明白为什么会这样,求大腿解疑

4 回复
jimmykuu
#1 jimmykuu • 2017-03-15 00:04

跟是否是 map 没有关系,你直接用

var b interface{} = &a
fmt.Println(*b)

会报一样的错误,原因是 interface{} 类型不能当指针来用,你要用断言,转换类型再用。

b, ok := m["a"].(*int)
if !ok {
    // 处理错误
    return
}
fmt.Println(*b)
mmdsnb
#2 mmdsnb • 2017-03-16 09:05

谢谢这位老铁。

nezhang
#3 nezhang • 2017-03-16 16:01

问题基本都靠站长扛着啦

kaixinmao
#4 kaixinmao • 2017-03-16 21:52

感觉社区人气都不高的样子

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。