Golang 将函数作为参数
    		       		warning:
    		            这篇文章距离上次修改已过433天,其中的内容可能已经有所变动。
    		        
        		                
                在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中函数作为参数的一些常见用法。
评论已关闭