在Go中是否可以指向一个带参数的成员函数/方法?

时间:2017-09-12 21:24:43

标签: go

如果我有

type Foo struct {
    // some data
}

func (f *Foo) Op1() bool {
    // perform operation and return a bool
}

func (f *Foo) Op2(other int) bool {
    // perform a different operation using internal data
    // and the passed in parameter(s)
}

我知道我可以存储指向第一种方法的指针。

fn := f.Op1

并将其命名为

if fn(f) { // do something }

但如果我想对Op2做同样的事情呢? 我目前正在伪装它,它定义了一个包装函数,它接受Foo和值并调用操作。但这是很多锅炉板代码。

1 个答案:

答案 0 :(得分:4)

使用方法表达式

在这种情况下,我们从类型中获取引用,然后您需要将实例作为第一个参数传递。

fn2 := (*Foo).Op2
f := &Foo{}
fn2(f, 2)

引用实例方法

在这种情况下,实例已绑定到方法,您只需提供参数:

fn2 := f.Op2
fn2(2)

游乐场:https://play.golang.org/p/e0gUIHzj7Z