【问题标题】:Function type with a receiver带接收器的函数类型
【发布时间】:2018-08-10 07:01:20
【问题描述】:

如何将接收者作为类型声明函数?

我以为我可以做到以下几点,但它抱怨语法错误:

type myFunc func(s *State) (blah Blah) err

func main() {
    b := &Blah{}
    s := &State{}

    var f = myF
    s.f(b)
}

func (s *State) myF(blah Blah) err {
    ...
}

【问题讨论】:

  • 别以为你能做到。
  • 使用接口。

标签: go type-alias


【解决方案1】:

您可以定义一个函数类型,将接收者作为其第一个参数(本质上就是方法)。

type myFunc func(*State, Blah) error

然后您可以使用method expression 创建该类型的值:

type Blah struct{}
type State struct{}

func (s *State) myF(Blah) error { return nil }

var f myFunc = (*State).myF

如果 M 在类型 T 的方法集中,则 T.M 是一个可作为常规函数调用的函数,其参数与 M 相同,前缀为方法接收者的附加参数。

[...]

表达式

T.Mv

产生一个等效于 Mv 的函数,但其​​第一个参数是显式接收器;它有签名

func(tv T, a int) int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2022-07-20
    • 2016-07-21
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多