Go 中可以将函数作为参数传递吗?
Java 允许通过使用匿名内部类将函数作为参数传递。 Go 是否提供了类似的机制来促进此功能?
答案:
当然! Go 支持通过匿名函数和闭包将函数作为参数传递。以下是一些示例:
示例 1:
package main import "fmt" type convert func(int) string func value(x int) string { return fmt.Sprintf("%v", x) } func quote123(fn convert) string { return fmt.Sprintf("%q", fn(123)) } func main() { result := quote123(value) fmt.Println(result) // Output: "123" }
在此示例中,convert 函数类型定义为采用整数并返回字符串。值函数通过返回输入整数的字符串表示形式来实现转换。 quote123 函数接受转换函数作为参数,并返回调用该函数结果的带引号字符串表示形式,值为 123。
示例 2:
package main import "fmt" func main() { result := quote123(func(x int) string { return fmt.Sprintf("%b", x) }) fmt.Println(result) // Output: "1111011" }
这里,一个匿名函数作为参数传递给 quote123 函数。匿名函数将输入整数转换为其二进制字符串表示形式。
示例 3:
package main import "fmt" func main() { foo := func(x int) string { return "foo" } result := quote123(foo) fmt.Println(result) // Output: "foo" }
在本例中,命名函数 foo 被传递为quote123 的一个参数。 foo 函数只是为任何输入返回字符串“foo”。
这些示例演示了在 Go 中将函数作为参数传递的灵活性和强大功能,使您能够创建通用且可重用的代码。
以上是Go 函数可以作为参数传递吗?的详细内容。更多信息请关注PHP中文网其他相关文章!