符号x.(T)
被称为Type Assertion.
对于接口类型和类型T
的表达式x
,主表达式x.(T)
断言x
不是nil
,并且存储在x
中的值是类型T
.
你的例子:
result["args"].(map[string]interface{})["foo"]
这意味着与关键点"args"
相关联的results
贴图的值属于类型map[string]interface{}
(另一个具有string
个关键点和任何值的贴图).并且您想要访问与键"foo"
相关联的映射的元素.
如果您对输入JSON格式一无所知,那么是的,您必须使用通用的map[string]interface{}
类型来处理它.如果您知道输入JSON的确切 struct ,则可以创建struct
以匹配预期字段,这样您就可以将JSON文本解组为自定义struct
类型的值,例如:
type Point struct {
Name string
X, Y int
}
func main() {
in := `{"Name":"center","X":2,"Y":3}`
pt := Point{}
json.Unmarshal([]byte(in), &pt)
fmt.Printf("Result: %+v", pt)
}
输出:
Result: {Name:center X:2 Y:3}
在Go Playground号公路上试试吧.
为你的输入建模
您当前的JSON输入可以用此类型建模:
type Data struct {
Args struct {
Foo string
}
}
和接入Foo
(在Go Playground):
d := Data{}
json.Unmarshal([]byte(in), &d)
fmt.Println("Foo:", d.Args.Foo)