首页 > 解决方案 > 单一方法上的多个接收器

问题描述

一个函数可以有多个接收器吗?换句话说,一个函数可以属于两个或多个structs?

说我有

type Struct1 struct {
  foo.Client
}

func CreateClient() struct1 {
  return struct1{
    ClientID: cId,
    // ...
  }
}

func (s *Struct1) MyFunc( // ... ) {}

但我也希望能够MyFunc与另一个struct (不同的包)关联:

type Struct2 struct {
  lgr log.logger
}

func NewStruct2 (l *log.logger) (*Struct2, err) {
  return &Struct2{mylog: *l}, nil
}

所以我真正想要的是:

func (s1 *Struct1, s2 *Struct2) MyFunc( // ... ) {}

标签: gomethodsstruct

解决方案


“是否可以在一个功能上拥有多个接收器?” - 这不可能。

https://golang.org/ref/spec#Method_declarations

接收者是通过方法名称前面的额外参数部分指定的。该参数部分必须声明一个非可变参数,即接收者。


推荐阅读