切片结构行为

时间:2019-12-28 07:30:07

标签: pointers go struct slice composite-literals

当我们声明一个结构片,但将数据类型设置为指向该结构的指针时,会自动将文字转换为指针吗?

type book struct {
    id int
    name string
}

var books = []*book {
    {1, "Yellow moon"}, // ---> Is this a pointer to book OR just book
}

3 个答案:

答案 0 :(得分:2)

它将是指向book的指针,与&book{1, "Yellow moon"}相同,但是该规范允许忽略类型和&运算符,因为从类型上很明显。

var books = []*book {
    {1, "Yellow moon"},  // This is the same as &book{1, "Yellow moon"}
}

Spec: Composite literals:

  

在数组,切片或映射类型为T的复合文字中,如果本身与复合文字相同的元素或映射键与{{1 }}。同样,当元素或键的类型为T时,作为组合文字的地址的元素或键可能会滑移&T

*T

答案 1 :(得分:1)

可以定义有无类型:

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

答案 2 :(得分:0)

Does go auto convert composite literals inside a slice to pointers if I declare the slice as a pointer to a struct?

这是指向struct的指针的默认行为

  

要在有结构指针p时访问结构的字段X,我们可以编写(* p).X。但是,这种表示法很麻烦,因此该语言允许我们改为只编写p.X,而无需显式取消引用。

https://tour.golang.org/moretypes/4