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中文网其他相关文章!