To be clear, I don't think there is any difference between pointer and non-pointer type assertion. An interface value holds a value of some type. That type can be a pointer type or a non-pointer type. Type assertions work exactly the same way. But I think it would be reasonable to add an example to the language spec of a type assertion to a pointer type. Leaving for @griesemer to decide.
我重新阅读了关于类型Assert的规范部分,它似乎很清楚。它通常讨论类型 T 的概念,并提到类型标识的概念。因此,要理解这个概念,需要了解(阅读)关于类型和类型标识的部分。后一部分清楚地表明指针类型 *T 及其基类型 T 是不同的。所以在这里增加更多的文字似乎并不合适;总的来说,规范写得相当简洁,我们避免重复其他地方已经说过的内容。
4条答案
按热度按时间fgw7neuy1#
我不确定你建议的是什么。这篇博客文章看起来是正确的,但它并没有说语言规范中没有提到的内容,尽管措辞简洁。语言规范已经说明了类型必须相同。你认为我们应该添加更多示例吗?
lzfw57am2#
感谢ianlancetaylor的及时回复!:)
博客文章看起来没问题,但它并没有说语言规范中没有提到的内容,尽管措辞简洁。语言规范已经说明了类型必须相同。
我同意,这些信息确实存在,但正如你所说,它们可能以一种不容易理解的方式打包在一起,尤其是对于像我这样的Go新手(我也来自Java背景,这肯定没有帮助)。作为额外的背景信息,在被提到的问题(即
impossible type assertion
)困扰之前,我确实阅读过类型Assert部分,但说实话,我完全没有意识到指针类型的类型Assert也是个问题(再次强调,这可能是我个人的问题)。你觉得我们应该添加更多的示例吗?
我的建议是至少添加一个涉及指针类型的类型Assert的例子,如果可能的话,用文字说明指针类型Assert与非指针类型Assert之间的微妙区别。
zsbz8rwp3#
To be clear, I don't think there is any difference between pointer and non-pointer type assertion. An interface value holds a value of some type. That type can be a pointer type or a non-pointer type. Type assertions work exactly the same way.
But I think it would be reasonable to add an example to the language spec of a type assertion to a pointer type. Leaving for @griesemer to decide.
jqjz2hbq4#
@ianlancetaylor 所说。我认为这篇博客至少在说“请记住,指向类型的指针与类型本身不同”时令人困惑。它似乎暗示这是不寻常的行为,但实际上并非如此。
我怀疑这种困惑来自于对指针类型概念的不熟悉,这在来自“无指针”类型的语言(如 Java 或 JavaScript)的人来说是可以理解的(更不用说这些语言在底层到处都使用指针,但试图隐藏这一点,从而导致其他困惑)。
我重新阅读了关于类型Assert的规范部分,它似乎很清楚。它通常讨论类型
T
的概念,并提到类型标识的概念。因此,要理解这个概念,需要了解(阅读)关于类型和类型标识的部分。后一部分清楚地表明指针类型*T
及其基类型T
是不同的。所以在这里增加更多的文字似乎并不合适;总的来说,规范写得相当简洁,我们避免重复其他地方已经说过的内容。如果有人想提出一个好的例子,请将其发送给我。谢谢。