在GO語言中還有另外一種定義使用函式的方式,就是函式型別,所謂的函式型別就是將函式作為一種型別可以用來定義變數,這種用法類似於前面我們講過的int ,float64,string等型別,這些型別都是可以用來定義變數。基本語法如下:
說明如下:type關鍵字後面跟著型別的名字(FunType),FunType就是一個型別.那麼FunType是一個什麼型別呢?
是一個函式型別,因為FunType後面跟著func(用來定義函式的),但是這裡注意的是沒有函式名字。那麼FunType是怎樣的一個函式型別呢?是一個需要傳遞兩個整型引數,有一個整型返回值的函式型別。
既然函式型別類似於我們前面學習過的 int ,string 等型別,那麼函式型別可以用來定義變數。
var result FuncType //表示定義了一個變數叫result,該變數的 型別是FuncType型別,而該型別是一個函式型別。
下面我們可以使用result這個函式型別的變數來呼叫函式了。
result=Test //將要呼叫的函式的名字賦值給result變數(也可以理解成將result變數指向了要呼叫的函式),這裡要注意的是:第一:Test後面不能加括號。第二:函式型別變數result要和將要呼叫的函式Test保持一致,所謂一致就是我們定義的函式型別FuncType的變數result,只能呼叫引數是兩個整型的,並且有一個返回值,而且也是整型的函式。那麼Test函式完全滿足要求。
現在已經完成了函式型別變數result指向了函式Test,那麼我們可以使用函式型別的變數result呼叫函式:
result(3,6)//完成函式的呼叫。
這是我們在GO語言中使用函式型別的方式完成函式的呼叫,可能有的小夥伴感覺這種方式比較麻煩,不如我們前面講解的方式使用起來簡單。那麼在這裡,要求大家先理解這種方式,能記住語法就可以了。關於該方式的優勢,等我們講解完物件導向程式設計這個知識點後,大家就有深刻的理解了。
package main
import "fmt"
func demo1(a int, b int) {
fmt.Println(a + b)
}
//func (int,int)int函式型別
func demo2(s1 int, s2 int) {
fmt.Println(s1 + s2)
}
//定義函式型別 為已存在的資料型別起別名
type FUNCDEMO func(int, int)
func main() {
//demo1(10, 20)
//函式的名字表示一個地址 函式在程式碼區的地址
fmt.Println(demo1)
//f是func (int,int)函式型別定義的變數
//var f func(int, int)
var f FUNCDEMO
//函式型別定義的變數結束函式的地址
f = demo1
fmt.Println(f)
//通過f呼叫函式
f(10, 20)
f = demo2
f(1, 2)
fmt.Printf("%T", f)
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結