dongzhou8764 2015-04-15 16:06
浏览 42
已采纳

存储通用函数

I would like to do something like this, but apparently it is not possible in this way, I think that there is something I miss.

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条回答 默认 最新

  • drsdvwsvo78320812 2015-04-15 16:36
    关注

    You have a type mismatch in that your struct member expects an func(param ...interface) and you are trying to pass it a func(map[string]command)

    See here for the explanation on how interface types work.

    If you change your code as below and give the struct member simply type interface{} it can take any type including a function which I think is what you want.

    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)
    }
    

    Try in on the Go Playground

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大