首页 > 后端开发 > Golang > 如何在 Go 中映射具有不同签名的函数?

如何在 Go 中映射具有不同签名的函数?

Mary-Kate Olsen
发布: 2024-12-10 22:15:14
原创
869 人浏览过

How Can I Map Functions with Different Signatures in Go?

Go 中的映射函数

在 Go 中,映射提供了一种将键与其各自的值关联起来的强大方法。要映射函数,键通常是表示函数名称或标识符的字符串,而值是函数引用。

示例:

考虑以下内容Go程序:

func a(param string) {
    fmt.Println("parameter:", param)
}

m := map[string]func(string) {
    "a": a,
}

for key, value := range m {
    if key == "a" {
        value("hello")
    }
}
登录后复制

在这个例子中,使用了一个map m来存储字符串键“a”和函数引用之间的映射a.该循环遍历映射并执行与“a”键关联的函数,并传入字符串“hello”作为参数。

处理各种函数签名:

但是,在最初的尝试中,您在尝试在映射中存储具有不同签名的函数时遇到了问题。这是因为映射中的值类型被声明为 func()。为了处理具有不同签名的函数,我们可以使用接口作为值类型,例如下面修改后的示例中使用的interface{}:

func f(p string) {}
func g(p string, q int) {}

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

通过使用interface{}类型,我们允许映射来存储任何类型的值,包括具有不同签名的函数。然后,我们在循环中使用显式类型转换来执行具有各自参数的函数。

以上是如何在 Go 中映射具有不同签名的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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