新问题:Go语言怎么初始化结构体类型数组中的指针类型呢?(原问题:Go语言怎么在结构体中定义一个指向函数的指针呢?)

yelingyun · · 3386 次点击
你好,我尝试了你的解决办法,代码如下: package main import ( "fmt" ) type DataNode struct{ cmd string desc string handler *func()int next *DataNode } var head = [] DataNode{} { {cmd:"help", desc:"cmd tips", handler:&help, &head[1]}, {cmd:"add", desc:"addition of two numbers", handler:&add, &head[2]} } func main(){ for true{ cmd *string fmt.Printf("Input a command > ") fmt.Scanf("%s\n", cmd) p := FindCmd(head, cmd) *tDataNode if p == nil{ fmt.Printf("This is a wrong cmd!\n") continue; } fmt.Printf("%s - %s\n", p.cmd, p.desc) if p.handler != nil { p.handler() } } return 0 } func help() int{ ShowAllCmd(head) return 0 } func add() int{ var num1, num2, add float64 fmt.Printf("+-------*--------*--------*--------*-------+\n") fmt.Printf("Addition!\nplease input two numbers:\n") fmt.Scanf("%f %f\n", &num1, &num2) add = num1 + num2 fmt.Printf("%f + %f = %f\n", num1, num2, add) return 0 } 但是报了错误如下: .\menu2.go:30: cannot take the address of help .\menu2.go:34: cannot take the address of add
#5
更多评论
func(*DataNode) next (){} 这样不好吗?
#1
你好,谢谢你的回答。是这样的,在结构体中,我定义handler是一个指向函数的指针变量,cmd是指向控制台输入的命令的指针变量。根据cmd值的不同,程序将不同的函数地址赋给handler。在c中,可以这么定义,int (*handler)(),但是我不知道怎么用go实现同样的功能,你知道吗?谢谢。
#2