在Go中什么时候写一个带或不带接收器的函数

60 阅读1分钟

我最近偶然发现了一个与接收器有关的事情,不知为何,Github上很快就有人给我找到了我要的答案。解释一下,我想要的是能够嵌入一个有接收器的第一类函数--在这种情况下,恰好是我想放的结构类型。我找到了一个使用类型名称func语法的解决方法,然后创建一个私有函数,该函数被包装在一个来自接口的类型绑定的接收器中,但这让我以不同的方式来做--这个解决方法很麻烦,而且很繁琐。

我没能找到关于这个问题的进一步文档,但基本上要点是,你可以在一个结构类型中创建一个interface{}字段,然后分配一个绑定到接口方法集合的函数,像这样:

type Name Struct {
  ...
  funcSlot interface{}
  ...
}

func (n *Name) FuncName() error {
  return nil
}

func NewName() (n *Name) {
  ...
  n.funcSlot = (*Name).FuncName
  ...
}

type NAME interface {
  ...
  FuncName() error
  ...
}

这样就可以通过走访,至少,我还没有确认这样做的效果是把指针传给结构体,这样函数就可以对实际上是一个类进行操作。