icz*_*cza 21

x.(T)
xTx.(T)xnilxT

你的例子:

result["args"].(map[string]interface{})["foo"]
results"args"map[string]interface{}string"foo"
map[string]interface{}structstruct
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
d := Data{}
json.Unmarshal([]byte(in), &d)
fmt.Println("Foo:", d.Args.Foo)
  • @SreejithRamakrishnan是的,`stirng(foo)`和`foo。(string)`之间是有区别的。第一个是_conversion_,第二个是_type assertion_。类型声明只能在_interface types _(“ interface {}”是一个合格的空接口)上使用,有关转换规则,请阅读规范:[Conversions](http://golang.org/ref/spec#Conversions )。如果您遇到这种情况,则不能仅使用转换类型声明。 (2认同)