接口{}类型理解

时间:2014-01-22 07:30:56

标签: go

无法理解问题:

    var foo interface{}
    foo = make(map[string]int)  
    fmt.Println(foo)  // map[]

    foo["one"] = 1

prog.go:10:无效操作:foo [“one”](接口类型的索引{}) [流程以非零状态退出]

为什么?

1 个答案:

答案 0 :(得分:4)

foo的类型为interface{}。它可能包含一个地图,但它仍然是一个界面。

为了进行地图查找,首先需要进行类型断言:

foo.(map[string]int)["one"] = 1

有关类型断言的更多信息,请参阅Go specifications

  

对于接口类型的表达式x和类型T,主表达式为
  X(T)
  断言x不是nil,存储在x中的值是T型   符号x。(T)称为类型断言