为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕森卡 2021-12-07 10:05:03
使用方法表达式从方法中获取函数非常简单func (t T) Foo(){}Foo := T.Foo       //yelds a function with signature Foo(t T)现在假设我已经有了func Foo(t T)我可以在T.Foo()不重写的情况下获得方法,或者至少是简单的方法吗?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

如果你想保留 function 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,就不必再重写函数本身。


查看完整回答
反对 回复 2021-12-07
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

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


func (t T) Foo() {

    Foo(t)

}


查看完整回答
反对 回复 2021-12-07
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

其他人已经指出了做到这一点的最佳方法:


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。


这显然不是你通常会做的事情。除非有原因,否则我建议坚持使用方法和函数。


查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信