go語言中將函數作為變量傳遞


在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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM