无法理解问题:
var foo interface{}
foo = make(map[string]int)
fmt.Println(foo) // map[]
但
foo["one"] = 1
prog.go:10:无效操作:foo [“one”](接口类型的索引{}) [流程以非零状态退出]
为什么?
答案 0 :(得分:4)
foo
的类型为interface{}
。它可能包含一个地图,但它仍然是一个界面。
为了进行地图查找,首先需要进行类型断言:
foo.(map[string]int)["one"] = 1
有关类型断言的更多信息,请参阅Go specifications:
对于接口类型的表达式x和类型T,主表达式为
X(T)
断言x不是nil,存储在x中的值是T型 符号x。(T)称为类型断言。