Rob Pike提出了表达,以创建指针到Golang的简单类型

2021-04-19 22:11:05

这个概念在#9097中得到解决,这是连同关闭的。而不是重新打开,让我采取另一种方法。

当& s {}被添加到语言中作为一种方法来构建指向综合文字的指针,它就没有感受到我。分配是半隐藏的,神奇的。但我已经习惯了,当然现在经常使用它。

但它仍然困扰着我一些,因为它是一个特殊的案例。为什么它只适用于复合文字?有这个原因,我们' ll回到,但它仍然感觉错误,它&#39更容易创建指向struct的指针:

我想向这种不一致提出两个不同的解决方案。现在已经反复建议我们允许指向常量的指针,如

但这有3个没有类型的令人讨厌的问题,所以刚刚赢得了'工作。

这两个步骤都是如此。如果我们首先关注新版本,我们可以通过允许对内置的第二个可选参数来将其减少到一行:

当然,当然也是如此增加了很多,而且口吃很讨厌,但它使这种形式能够轻松地制作一些先前笨拙的指针构建:

p1:= new(int,3)p2:= new(rune,10)p3:= new(平日,星期二)p4:= new(名称,"未指明")......等等

在这盏灯中看到,这种构建纠正了它的事实,即它更难地构建指向一个简单类型的指针而不是复合类型。

通过显式分配表达式的存储来创建从非寻址版本创建可寻址表单。它可以应用于大量的地方,包括函数返回:

此外,虽然我们可以遗漏这一步骤(但看到选项2)我们现在可以重新定义&操作员应用于非可接广类型的键入表达式,

其中expr不是现有的内存位置现在只是定义为速记

我比大多数人更多的内置的粉丝。它'定期且易于使用,只是有点冗长。但是,有很多人不会因为某种原因而喜欢它。所以这里'' t' t改变新的方法。相反,我们定义该转换(也许是型断言,但是在这里,Let'不担心它们)是可纳便器。这为我们提供了一种定义该常量3的类型的另一机制:

这是因为转换必须始终创建新存储。根据定义,转换更改结果的类型,因此它必须创建该类型的位置以保持该值。我们不能说& 3因为没有类型,但通过使操作适用于转换,总是有一个定义的类型。

就个人而言,我发现这两个机制都很有吸引力,尽管任何一个人都会划伤痒。 因此,我们建议我们做两者,但当然讨论可能最终只选择一个。 这是向后兼容的吗? 打破Go 1兼容性保证是大的成本,需要大的好处。 与其他人进行相比,相当小的编译更新。 需要触摸文档,规格,或许是一些例子。 对于这种情况来说,更规则性,删除限制并制作一些(不是非常常见但刺激性的)构造。 如果是这样,这与当前的设计草案和之前的普遍提案有何不同?