在Go中,可以将函数作为参数传递,如callFunction(fn func)
。例如:使用函数名称作为参数
package main
import "fmt"
func example() {
fmt.Println("hello from example")
}
func callFunction(fn func) {
fn()
}
func main() {
callFunction(example)
}
但是当它是一个结构的成员时可以调用一个函数吗?下面的代码会失败,但给你的,我说的是什么一个例子:
package main
import "fmt"
type Example struct {
x int
y int
}
var example Example
func (e Example) StructFunction() {
fmt.Println("hello from example")
}
func callFunction(fn func) {
fn()
}
func main() {
callFunction(example.StructFunction)
}
(我知道我想在这例子做的是一个有点古怪的具体问题,我已经没有按虽然我不是一个简单的例子,但是这是我的问题的本质,但我从学术角度也对此感兴趣)
我没有试图编译该代码,它是我直接编码到SO中的问题的模拟。所以,软件包/程序和x/y类型的错误只是缺乏头脑,而不是我原来的代码问题。 我很疑惑你是如何得到输出的,因为你的代码的失败方式与我的做法一样:'method example.StructFunction不是一个表达式,必须调用'[编辑] ahh问题是Go的版本我正在运行(1.0.3)不支持它。提示确实。 – laumars 2013-04-09 13:57:11
'$ go version' 'go version devel + 1a196137ed09 Tue Apr 09 18:17:55 2013 +1000 linux/amd64'这是否意味着Go现在可以做你想做的事了? – peterSO 2013-04-09 14:14:29
还没有,但是当1.1推出我的回购,那么它会。鉴于这一周只有几个星期,我很乐意等待。 – laumars 2013-04-09 14:26:56