解组 json 引用类型

Unmarshall json reference types

我正在尝试编写一个工作示例来测试 this link 的 "Reference Types" 部分。

但我无法理解这应该如何工作。下面提供了我尝试编写但没有成功的示例,仅供参考:

package main

import (
    "fmt"
    "log"
    "encoding/json"
)

type Foo1 struct {
    Val     int
}

type Foo2 struct {
    Name    string
}

type IncomingMsg struct {
    F1 *Foo1
    F2 *Foo2
}

func main() {
    b := []byte(`{"F1" : {"Val":13}}`)
//  b := []byte(`{"F2" : {"Name":"Hello"}}`)

    var msg IncomingMsg

    err := json.Unmarshal(b, &msg)
    if err != nil {
        log.Fatal(err)
    }

    if msg.F1 != nil {
        fmt.Println(msg.F1.Val)
    }

    if msg.F2 != nil {
        fmt.Println(msg.F2.Name)
    }
}

你们中有更多 Go 经验的人可以帮助解决这个问题吗?

编辑:提供的测试已更新,现在按预期工作。谢谢亚当先生提供的答案,它对我理解这个问题有很大帮助! :)

您在示例中发布的 json 正文中似乎缺少 F1

https://play.golang.org/p/Fl-lhH2y3X

b := []byte(`{"F1":{"Val":13}}`)