bb.person被填充而a.Person没有被填充是有原因的吗?

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    First string `json:"name"`
}

type person struct {
    Last string `json:"name"`
}

type A struct {
    *Person `json:"person"`
}

func (a *A) UnmarshalJSON(b []byte) error {
    type alias A

    bb := struct {
        *person `json:"person"`
        *alias      
    }{
        alias: (*alias)(a),
    }

    if err := json.Unmarshal(b, &bb); err != nil {
        return err
    }

    fmt.Printf("%+v
", bb.person)

    return nil
}

func main() {
    b := []byte(`{"person": {"name": "bob"}}`)
    a := &A{}

    if err := json.Unmarshal(b, a); err != nil {
        fmt.Println(err)
    }

    fmt.Printf("%+v
", a.Person)
}

results in:

&{Last:bob}
<nil>

Why does bb.person and a.Person have the same struct tag but only bb.person gets filled in? I haven't been able to find the appropriate documentation but why does this happen and is it guaranteed to always happen?

https://play.golang.org/p/Fvo_hg3U6r