Golang中的高阶函数

Golang中的函数,可以作为函数的参数,传递给另外一个函数,可以作为另一个函数的返回值返回。

Golang中的函数作为参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import "fmt"

func sayHello(name string) {
fmt.Printf("Hello,%s", name)
}

func f1(name string, f func(name string)) {
f(name)
}

func main() {
f1("WeiYunfeng", sayHello)
}

运行结果:

1
Hello,WeiYunfeng

Golang中的函数作为返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import "fmt"

func add(a int, b int) int {
return a + b
}

func sub(a int, b int) int {
return a - b
}

func cal(operator string) func(int, int) int {
switch operator {
case "+":
return add
case "-":
return sub
default:
return nil
}
}
func main() {
ff := cal("+")
r := ff(1, 2)
fmt.Printf("r: %v\n", r)
ff = cal("-")
r = ff(2, 1)
fmt.Printf("r: %v\n", r)
}

运行结果:

1
2
r: 3
r: 1