在go中函数也是一种变量,我们通过type定义这种变量的类型。拥有相同参数和相同返回值的函数属于同一种类型。
通过将函数作为一种类型的变量,我们可以将这种类型的函数作为值传递。
下面是一个简单的例子。
type functinTyoe func(int) bool // 声明了一个函数类型func isOdd(integer int) bool { if integer%2 == 0 { return false } return true}func isEven(integer int) bool { if integer%2 == 0 { return true } return false}// 声明的函数类型在这个地方当做了一个参数func filter(slice []int, f functinTyoe) []int { var result []int for _, value := range slice { if f(value) { result = append(result, value) } } return result} func test(){ slice := []int {1, 2, 3, 4, 5, 7} fmt.Println("slice = ", slice) odd := filter(slice, isOdd) // 函数当做值来传递了 fmt.Println("Odd elements of slice are: ", odd) even := filter(slice, isEven) // 函数当做值来传递了 fmt.Println("Even elements of slice are: ", even)}