以下代码输出什么?

package main

import (
    "encoding/json"
    "fmt"
)

type AutoGenerated struct {
    Age   int    `json:"age"`
    Name  string `json:"name"`
    Child []int  `json:"child"`
}

func main() {
    jsonStr1 := `{"age": 14,"name": "potter", "child":[1,2,3]}`
    a := AutoGenerated{}
    json.Unmarshal([]byte(jsonStr1), &a)
    aa := a.Child
    fmt.Println(aa)
    jsonStr2 := `{"age": 12,"name": "potter", "child":[3,4,5,7,8,9]}`
    json.Unmarshal([]byte(jsonStr2), &a)
    fmt.Println(aa)
}
  • A:[1 2 3] [1 2 3]
  • B:[1 2 3] [3 4 5]
  • C:[1 2 3] [3 4 5 6 7 8 9]
  • D:[1 2 3] [3 4 5 0 0 0]
答: B 解析: Json反序列化时,切片的处理方式是将切片的len值改为0后append数据。 因为 aa := a.Child aa 和 a.Child 切片指向同一个数组,append 到6时,因为a.Child未扩容,所以修改底层数组等同于修改aa的数据。但是在append到7时,a.Child 切片发生了切片扩容指向了新的数组。 因此aa的数据为 [3 4 5]