为了账号安全,请及时绑定邮箱和手机立即绑定

切片结构行为

切片结构行为

Go
白衣染霜花 2022-04-26 15:53:23
当我们声明一个结构切片,但将数据类型设置为指向该结构的指针时,go 会自动将文字转换为指针吗?type book struct {    id int    name string}var books = []*book {    {1, "Yellow moon"}, // ---> Is this a pointer to book OR just book}
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

可以定义有和没有类型:

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


查看完整回答
反对 回复 2022-04-26
?
www说

TA贡献1775条经验 获得超8个赞

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


var books = []*book {

    {1, "Yellow moon"},  // This is the same as &book{1, "Yellow moon"}

}

规范:复合文字:


在数组、切片或映射类型的复合文字中T,本身是复合文字的元素或映射键可以省略相应的文字类型,如果它与 的元素或键类型相同T。&T类似地,当元素或键类型为 时,作为复合文字地址的元素或键可以省略*T。


[][]Point{{{0, 1}, {1, 2}}}  // same as [][]Point{[]Point{Point{0, 1}, Point{1, 2}}}


[2]*Point{{1.5, -3.5}, {}}   // same as [2]*Point{&Point{1.5, -3.5}, &Point{}}



查看完整回答
反对 回复 2022-04-26
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

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

这是指向结构的指针的默认行为

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

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


查看完整回答
反对 回复 2022-04-26
  • 3 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信