Golang 将函数作为参数
在Golang中,函数也是一种数据类型,可以被当作值进行传递。这种特性被称为高阶函数。
以下是一些示例:
- 定义一个接收函数作为参数的函数:
package main
import (
"fmt"
)
func apply(f func(int, int) int, a int, b int) int {
return f(a, b)
}
func main() {
res := apply(func(a int, b int) int {
return a + b
}, 3, 4)
fmt.Println(res)
}
在这个例子中,我们定义了一个apply
函数,它接收一个函数f
作为参数,和两个整数a
和b
。apply
函数返回f(a, b)
的结果。在main
函数中,我们创建了一个匿名函数并传递给apply
函数。
- 使用函数作为其他函数的返回值:
package main
import (
"fmt"
)
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
f := adder()
fmt.Println(f(1)) // 输出1
fmt.Println(f(2)) // 输出3
fmt.Println(f(3)) // 输出6
}
在这个例子中,adder
函数返回一个新的函数,这个函数会累积传递给它的整数值。每次调用adder
函数时,它都会返回一个新的累加器,它们之间是独立的。
- 将函数作为goroutine的参数:
package main
import (
"fmt"
"time"
)
func printHello(done chan bool) {
fmt.Println("Hello!")
time.Sleep(1 * time.Second)
done <- true
}
func main() {
done := make(chan bool)
go printHello(done)
<-done
fmt.Println("Hello goroutine is done!")
}
在这个例子中,我们创建了一个printHello
函数,它接收一个chan bool
作为参数。然后我们在main
函数中创建了一个chan bool
,并将它传递给printHello
函数,在新的goroutine中运行。printHello
函数完成后,它会向chan
发送一个值,main
函数中的<-done
会等待这个值,然后打印出一条完成的消息。
以上就是Golang中函数作为参数的一些常见用法。
评论已关闭