在go語言當中,我們可以把函式作為一種變數,用type去定義它,那麼這個函式型別就可以作為值傳遞,甚至可以實現方法,這一特性實在太靈活了,有時候我們甚至可以利用這一特性進行型別轉換,作為值傳遞的條件是型別具有相同的引數以及相同的返回值
函式型別轉換
Go語言的型別轉換的基本格式如下:
type_name(expression)
上程式碼:
package main
import (
"fmt"
"sync"
)
func main() {
//函式的型別轉換
//將add()函式強制轉換為我們自定義的CalculateType()型別
zhAdd := CalculateType(add)
//那麼zhAdd就可以呼叫CalculateType()函式型別實現的方法Serve()
zhAdd.Serve()
//也可以直接使用 往函式體當中傳參
zhAdd(1,2)
//函式作為引數傳遞
mute := CalMute(1, 2, add1)
fmt.Println(mute)
}
//函式作為型別
type CalculateType func(int,int)
//通過函式型別實現的方法
func (c *CalculateType) Serve() {
fmt.Println("我是函式型別")
}
//配合函式的型別轉換
func add(a,b int){
fmt.Println(a+b)
}
//配合函式的型別轉換
func mul(a,b int) {
fmt.Println(a*b)
}
//函式作為引數傳遞
//宣告一個函式型別
type CalculateTypeParma func(int,int) int
//配合函式作為引數傳遞
func add1(a,b int) int {
return a+b
}
//配合函式作為引數傳遞
func mul2(a,b int) int {
return a*b
}
//傳入a b 和 函式名稱 即 將函式作為引數傳遞進來
func CalMute(a,b int,f CalculateTypeParma) int {
return f(a,b)
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結