【问题标题】:How to pass method as parameter in Go?如何在Go中将方法作为参数传递?
【发布时间】:2019-08-15 13:32:51
【问题描述】:

我只想将它们属于“任何”结构的一些方法传递给它们的接收器方法。

这些是原型方法。

func (r *Rules) Checker(fn ...func()) {}
func (r *Rules) CheckEmpty() {}
func (r *Rules) CheckMax()  {}

我想要的就在这里:

v.Rule.Checker(
    v.Rule.CheckEmpty(),
    v.Rule.CheckMax(),
)

但我认为函数类型不相等,程序给我错误“type void type as type func()”。 有没有办法按照我的意愿调用这些方法?

【问题讨论】:

  • type void type as type func() 在 Go 中不是错误。你能发布你收到的实际错误吗?看起来您在这里可能想要的是v.Rule.Checker(v.Rule.CheckEmpty, v.Rule.CheckMax) - 传递函数而不是调用它们并传递它们的返回值(它们没有)。

标签: go struct parameter-passing


【解决方案1】:

您希望将函数本身传递给Checker,而不是函数调用的结果。为此,请将() 放在函数名后面,这样函数就不会被调用:

v.Rule.Checker(
    v.Rule.CheckEmpty,
    v.Rule.CheckMax,
)

【讨论】:

  • 谢谢,我现在明白了。
猜你喜欢
  • 2011-10-14
  • 2015-08-19
  • 2010-10-16
  • 2013-08-10
  • 2021-04-17
  • 2014-08-29
  • 2015-03-10
相关资源
最近更新 更多