存储通用函数

我想做这样的事情,但显然这是不可能的,我认为我想念一些东西。


type command struct {                                                            

    help string                                                                  

    handler func (params ...interface{})                                         

}                                                                                


func showHelp( commands map[string]command ) {                                   

    fmt.Println( "Help:" )                                                       

    for c, h := range commands {                                                 

        fmt.Println( c,"->" ,h.help )                                            

    }                                                                            

}                                                                                


func main() {                                                                

    // Map to store commands                                                     

    commands := make( map[string]command )                                       


    // Adding help command                                                       

    commands["help"] = command{ "show this information", showHelp }

}


森栏
浏览 145回答 3
3回答

四季花海

您的类型不匹配,因为您的结构成员需要 func(param ...interface) 而您正试图将其传递给 func(map[string]command)有关接口类型如何工作的说明,请参见此处。如果您按如下方式更改代码并为结构成员提供简单的类型 interface{},则它可以采用任何类型,包括我认为您想要的函数。package mainimport "fmt"type command struct {    help    string    handler interface{}}func showHelp(commands map[string]command) {    fmt.Println("Help:")    for c, h := range commands {        fmt.Println(c, "->", h.help)    }}func main() {    // Map to store commands    commands := make(map[string]command)    // Adding help command    commands["help"] = command{"show this information", showHelp}    showHelp(commands)}

潇湘沐

我想你正在寻找这样的东西;package mainimport "fmt"type command struct {                                                                help string                                                                      handler func()                                        }   func main() {    c := command{}    c.handler = func () {     fmt.Println("Hello, playground")    }    c.handler()}至少我会这样做。将 func 类型的字段放在您的结构上,然后在任何方便的地方使用闭包为其分配方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go