在Go中函數也是一種變量,我們可以通過type來定義它,它的類型就是所有擁有相同的參數,相同的返回值的一種類型,函數當做值和類型在我們寫一些通用接口的時候非常有用,通過下面這個例子我們可以看到testInt類型是一個函數類型,然后兩個filter函數的參數和返回值與testInt類型一樣的,但是我們可以實現很多種邏輯,這樣使得我們的程序可以變得非常的靈活。
package main
import (
"fmt"
)
//聲明了一個函數類型
type testInt 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 testInt) []int {
var result []int
for _, value := range slice {
if f(value) {
result = append(result, value)
}
}
return result
}
func main() {
slice := []int{1, 2, 3, 4, 5, 7}
fmt.Println("slice = ", slice)
//將函數當做值來傳遞
odd := filter(slice, isOdd)
fmt.Println("奇數是:", odd)
//將函數當做值來傳遞
even := filter(slice, isEven)
fmt.Println("偶數是:", even)
}
//運行結果
$ go run test.go
slice = [1 2 3 4 5 7]
奇數是: [1 3 5 7]
偶數是: [2 4]