在Go中使用函数创建方法的简单方法是什么?

时间:2016-01-11 16:30:38

标签: go

使用方法表达式

从方法中获取函数是非常简单的
func (t T) Foo(){}
Foo := T.Foo       //yelds a function with signature Foo(t T)

现在假设我已经

func Foo(t T)

我可以在没有重写的情况下获得方法T.Foo(),或者至少是简单方法吗?

3 个答案:

答案 0 :(得分:3)

如果你想保留函数Foo(t T),例如为了向后兼容,你可以简单地定义一个调用已经存在的函数的struct方法:

type T struct {
    // ...
}

func Foo(t T) {
    // ...
}

// Define new method that just calls the Foo function
func (t T) Foo() {
    Foo(t)
}

或者,您可以轻松地将功能签名从func Foo(t T)更改为func (t T) Foo()。只要您不更改t的名称,就不必再进一步重写该功能。

答案 1 :(得分:2)

假设T是一个结构,你可以:

func (t T) Foo() {
    Foo(t)
}

答案 2 :(得分:1)

其他人已经指出了最好的方法:

func (t T) Foo() { Foo(t) }

但如果由于某种原因需要在运行时执行此操作,则可以执行以下操作:

func (t *T) SetFoo(foo func(T)) {
    t.foo = foo
}

func (t T) CallFoo() {
    t.foo(t)
}

游乐场:http://play.golang.org/p/A3G-V0moyH

这显然不是你通常会做的事情。除非有理由,否则我建议坚持使用方法和功能。