Go 中从字符串到函数的指针
元编程,或者说在运行时操作代码本身的能力,是一种强大的编程技术。在 Go 中,可能出现的一个方面是需要根据函数名称访问函数指针,该函数以字符串形式提供。
解决方案
与在动态语言中,Go 函数被认为是一流的值。这意味着函数可以作为参数传递给其他函数,从而无需复杂的元编程技术。
为了演示这一点,请考虑以下代码片段:
package main import "fmt" func someFunction1(a, b int) int { return a + b } func someFunction2(a, b int) int { return a - b } func someOtherFunction(a, b int, f func(int, int) int) int { return f(a, b) } func main() { fmt.Println(someOtherFunction(111, 12, someFunction1)) fmt.Println(someOtherFunction(111, 12, someFunction2)) }
执行
执行此代码时,会产生以下结果输出:
123 99
这演示了如何根据函数的名称将函数作为参数传递给 someOtherFunction。
自定义函数选择
如果函数的选择取决于仅在运行时才知道的值,您可以使用映射将函数名称与其相应的函数关联起来指针:
m := map[string]func(int, int) int{ "someFunction1": someFunction1, "someFunction2": someFunction2, } ... z := someOtherFunction(x, y, m[key])
以上是如何在运行时使用 Go 函数的名称(字符串)调用该函数?的详细内容。更多信息请关注PHP中文网其他相关文章!