为了账号安全,请及时绑定邮箱和手机立即绑定

存储通用函数

存储通用函数

Go
森栏 2021-09-27 21:10:36
我想做这样的事情,但显然这是不可能的,我认为我想念一些东西。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 }}
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

您的类型不匹配,因为您的结构成员需要 func(param ...interface) 而您正试图将其传递给 func(map[string]command)


有关接口类型如何工作的说明,请参见此处。


如果您按如下方式更改代码并为结构成员提供简单的类型 interface{},则它可以采用任何类型,包括我认为您想要的函数。


package main


import "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)

}


查看完整回答
反对 回复 2021-09-27
?
潇湘沐

TA贡献1816条经验 获得超6个赞

我想你正在寻找这样的东西;


package main


import "fmt"



type command struct {                                                            

    help string                                                                  

    handler func()                                        

}   



func main() {

    c := command{}

    c.handler = func () { 

    fmt.Println("Hello, playground")

    }

    c.handler()

}

至少我会这样做。将 func 类型的字段放在您的结构上,然后在任何方便的地方使用闭包为其分配方法。


查看完整回答
反对 回复 2021-09-27
  • 3 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信