Pointers 在Go中调用接口指针上的方法

Pointers 在Go中调用接口指针上的方法,pointers,interface,go,Pointers,Interface,Go,我仍然在思考围棋中接口和指针的细节。我遇到了一个包含指向的指针的简单类型的问题。当我试图调用指针上的方法(Close)时,我收到type*net.Conn没有字段或方法Close 下面是一个简单的例子,突出了这个问题: 在这里调用Close()的正确方法是什么 简短的回答是“不要使用指向接口的指针”。几乎不需要它们,并且最终会出现如您所见的令人困惑的错误 您也永远不会使用new()来创建指向空接口的指针。接口由具体类型隐式满足。net.Conn是一个小的(两个字)结构。如果实现是指针,那么持有该

我仍然在思考围棋中接口和指针的细节。我遇到了一个包含指向的指针的简单类型的问题。当我试图调用指针上的方法(Close)时,我收到
type*net.Conn没有字段或方法Close

下面是一个简单的例子,突出了这个问题:

在这里调用
Close()
的正确方法是什么

简短的回答是“不要使用指向接口的指针”。几乎不需要它们,并且最终会出现如您所见的令人困惑的错误


您也永远不会使用
new()
来创建指向空接口的指针。接口由具体类型隐式满足。

net.Conn是一个小的(两个字)结构。如果实现是指针,那么持有该实现的net.Conn也类似于指针。有关如何在引擎盖下工作的接口说明,请参阅。

好的,这是公平的,我以前肯定读过。那么我的问题是,;net.Conn后面的基础类型必须分配到某个位置。难道不值得担心在整个程序中传递net.Conn的副本吗?从表面上看,这似乎效率低下,但可能我对“按引用传递/值”的理解与其他语言不同。@uidzer0
net.Conn
是一个非常小的2字结构。复制它比取消引用指针要快。@uidzer0,也忘了按引用传递——Go中的所有内容都是按值传递的(实际上,大多数语言都是这样)。指针只是你可以传递的另一个值。谢谢Russ,JimB巩固了我传递指针的思路。我只是想对你发表的详细文章表示感谢。我发现自己在你的网站上出现过无数次。几个月来我一直在搞围棋,来自C++/Delphi等——遇到了同样的困惑——我的一些问题就在这里。从这里的GoPhers家伙那里得到它,忘记你从其他语言中的概念-Go看起来像C,但行为不像它。。。