golang基礎語法,定義函式型別 為已存在的資料型別起別名

wangchunbo發表於2020-11-12

在GO語言中還有另外一種定義使用函式的方式,就是函式型別,所謂的函式型別就是將函式作為一種型別可以用來定義變數,這種用法類似於前面我們講過的int ,float64,string等型別,這些型別都是可以用來定義變數。基本語法如下:

golang基礎語法,定義函式型別 為已存在的資料型別起別名

說明如下: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 協議》,轉載必須註明作者和本文連結
感謝關注 上海PHP自學中心-免費程式設計視訊教學|

相關文章