在 Go 中,您可以将函数作为参数传递,例如callFunction(fn func). 例如:package mainimport "fmt"func example() { fmt.Println("hello from example")}func callFunction(fn func) { fn()} func main() { callFunction(example)}但是当它是结构的成员时是否可以调用函数?下面的代码会失败,但给你一个我在说什么的例子:package mainimport "fmt"type Example struct { x int y int}var example Examplefunc (e Example) StructFunction() { fmt.Println("hello from example")}func callFunction(fn func) { fn()} func main() { callFunction(example.StructFunction)}(我知道我在那个例子中要做的事情有点奇怪。我遇到的确切问题并没有很好地缩小到一个简单的例子,但这就是我的问题的本质。但是我也很感兴趣这是从学术角度)
3 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
Go 1.0 不支持使用绑定方法作为函数值。Go 1.1 将支持它,但在那之前您可以通过闭包获得类似的行为。例如:
func main() {
callFunction(func() { example.StructFunction() })
}
它不太方便,因为您最终复制了函数原型,但应该可以解决问题。
交互式爱情
TA贡献1712条经验 获得超3个赞
我修复了你的编译错误。
package main
import "fmt"
type Example struct {
x, y float64
}
var example Example
func (e Example) StructFunction() {
fmt.Println("hello from example")
}
func callFunction(fn func()) {
fn()
}
func main() {
callFunction(example.StructFunction)
}
输出:
hello from example
- 3 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消