Golang 基礎值速學之十九(函式作為值與型別)

huxiaobai_001發表於2020-07-10

在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 協議》,轉載必須註明作者和本文連結

胡軍

相關文章