首页 > 后端开发 > Golang > Go中如何使用Map动态存储和调用函数?

Go中如何使用Map动态存储和调用函数?

Patricia Arquette
发布: 2024-12-12 21:43:09
原创
284 人浏览过

How Can I Store and Invoke Functions Dynamically Using Maps in Go?

在 Go 中的 Map 中存储函数

在 Go 中,map 是可以存储键值对的通用数据结构。有时,将函数存储在映射中很有用,允许基于键进行动态调用。

问题:

假设您有多个函数并想要创建一个映射,其中键是函数名称,值是函数本身。但是,当尝试执行此操作时,如下所示,您会遇到错误:

func a(param string) {}

m := map[string]func{} 
'a_func': a,
}

for key, value := range m {
    if key == 'a_func' {
        value(param) 
    }
}
登录后复制

解决方案:

出现此问题的原因是定义特定于类型的映射的语法是不正确的。要解决此问题,您可以使用语法 map[string]interface{} 代替,因为值不强制类型安全。下面的修改示例说明了如何存储和调用映射中的函数:

package main

import "fmt"

func f(p string) {
    fmt.Println("function f parameter:", p)
}

func g(p string, q int) {
    fmt.Println("function g parameters:", p, q)
}

func main() {
    m := map[string]interface{}{
        "f": f,
        "g": g,
    }
    for k, v := range m {
        switch k {
        case "f":
            v.(func(string))("astring")
        case "g":
            v.(func(string, int))("astring", 42)
        }
    }
}
登录后复制

在此示例中,映射 m 将两个函数值存储为 interface{}。当根据 key 调用函数时,会执行类型断言,将接口值转换为正确的函数类型。

以上是Go中如何使用Map动态存储和调用函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板