使用方法表达式
从方法中获取函数是非常简单的func (t T) Foo(){}
Foo := T.Foo //yelds a function with signature Foo(t T)
现在假设我已经
了func Foo(t T)
我可以在没有重写的情况下获得方法T.Foo()
,或者至少是简单方法吗?
答案 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。
这显然不是你通常会做的事情。除非有理由,否则我建议坚持使用方法和功能。