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

ben*_*ier 9 pointers interface go

我仍然在围绕Go中的接口和指针的细节包裹.我遇到了一个包含指向net.Conn的指针的简单类型的问题.当我尝试在指针上调用方法(Close)时,我正在接收type *net.Conn has no field or method Close

这是一个突出问题的简单例子:http://play.golang.org/p/Q4LB0wi6Tk

Close()在这里打电话的正确方法是什么?

Jim*_*imB 12

简短的回答是"不要使用指向接口的指针".几乎没有任何需要它们,你最终会遇到像你看到的令人困惑的错误.

您也绝不会使用new()创建指向空接口的指针.具体类型隐含地满足接口.

  • 好的,这很公平,我之前肯定已经读过了.我的问题是; 必须在某处分配net.Conn背后的基础类型.在整个程序中传递net.Conn的副本是不值得担心的?从表面上看,这似乎效率低下,但也许我对传递引用/值的理解与其他语言不同. (2认同)
  • @ uidzer0`net.Conn`是一个非常小的2字结构.复制它比取消引用指针更快. (2认同)
  • @ uidzer0,也忘了传递引用 - Go中的所有内容都是按值传递(实际上,大多数语言都是如此).指针只是您可以传递的另一个值. (2认同)

Rus*_*Cox 10

net.Conn是一个小(双字)结构.如果实现是一个指针,那么持有该实现的net.Conn也就像一个指针.有关接口如何工作的说明,请参见http://research.swtch.com/interfaces.