go 扩展类型Assert部分 ```markdown 扩展类型Assert部分 ```

jogvjijk  于 6个月前  发布在  Go
关注(0)|答案(4)|浏览(49)

今天我遇到了这个问题,希望能在参考文档中找到更多关于指针类型上的类型Assert的例子,但遗憾的是,似乎没有。
将当前的类型Assert部分扩展到这个内容上是否合理?
(顺便说一下,我是一个Go新手,所以如果在现有文档中遗漏了什么,请提前道歉!)

fgw7neuy

fgw7neuy1#

我不确定你建议的是什么。这篇博客文章看起来是正确的,但它并没有说语言规范中没有提到的内容,尽管措辞简洁。语言规范已经说明了类型必须相同。你认为我们应该添加更多示例吗?

lzfw57am

lzfw57am2#

感谢ianlancetaylor的及时回复!:)
博客文章看起来没问题,但它并没有说语言规范中没有提到的内容,尽管措辞简洁。语言规范已经说明了类型必须相同。
我同意,这些信息确实存在,但正如你所说,它们可能以一种不容易理解的方式打包在一起,尤其是对于像我这样的Go新手(我也来自Java背景,这肯定没有帮助)。作为额外的背景信息,在被提到的问题(即impossible type assertion)困扰之前,我确实阅读过类型Assert部分,但说实话,我完全没有意识到指针类型的类型Assert也是个问题(再次强调,这可能是我个人的问题)。
你觉得我们应该添加更多的示例吗?
我的建议是至少添加一个涉及指针类型的类型Assert的例子,如果可能的话,用文字说明指针类型Assert与非指针类型Assert之间的微妙区别。

zsbz8rwp

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.

jqjz2hbq

jqjz2hbq4#

@ianlancetaylor 所说。我认为这篇博客至少在说“请记住,指向类型的指针与类型本身不同”时令人困惑。它似乎暗示这是不寻常的行为,但实际上并非如此。

我怀疑这种困惑来自于对指针类型概念的不熟悉,这在来自“无指针”类型的语言(如 Java 或 JavaScript)的人来说是可以理解的(更不用说这些语言在底层到处都使用指针,但试图隐藏这一点,从而导致其他困惑)。

我重新阅读了关于类型Assert的规范部分,它似乎很清楚。它通常讨论类型 T 的概念,并提到类型标识的概念。因此,要理解这个概念,需要了解(阅读)关于类型和类型标识的部分。后一部分清楚地表明指针类型 *T 及其基类型 T 是不同的。所以在这里增加更多的文字似乎并不合适;总的来说,规范写得相当简洁,我们避免重复其他地方已经说过的内容。

如果有人想提出一个好的例子,请将其发送给我。谢谢。

相关问题