函數(shù)類型也叫作函數(shù)簽名, 就是函數(shù)定義首行去掉函數(shù)名、參數(shù)名和{,可以使用fmt.Printf 的”%T”格式化參數(shù)打印函數(shù)的類型。 可以使用 type 定義函數(shù)類型,函數(shù)類型變量可以作為函數(shù)的參數(shù)或返回值。 實際函數(shù)類型變量和函數(shù)名都可以當(dāng)作指針變量,該指針指向函數(shù)代碼 開始位置
funcadd(a int, b int)int{return a + b
}funcsub(a int, b int)int{return a - b
}type Op func(int,int)int;// 定義一個函數(shù)類型,type FuncTypeVar struct{f Op
}funcdo(f Op, a int, b int)int{returnf(a, b)}funcmain(){a :=do(add,2,3)//函數(shù)名 add 可以當(dāng)作相同函數(shù)類型形參,不需強制類型轉(zhuǎn)換fmt.Println(a)b :=do(sub,3,2)fmt.Println(b)temp :=&FuncTypeVar{}fmt.Println(temp.f)// <nil>}
package mainimport"fmt"//匿名函數(shù)被直接賦值函數(shù)變量var sum =func(a int, b int)int{return a + b
}funcdoinput(f func(int,int)int, a int, b int)int{//func(int, int) int 為函數(shù)類型returnf(a, b)}// 匿名函數(shù)作為返回值funcwrap(op string)func(int,int)int{switch op {case"add":returnfunc(a int, b int)int{return a + b}case"sub":returnfunc(a int, b int)int{return a - b}default:returnnil}}funcmain(){// 匿名函數(shù)直接執(zhí)行deferfunc(){fmt.Println("this is anonymity function")}()sum(1,2)// 匿名函數(shù)作為實參doinput(func(x int, y int)int{return x + y},1,2)opFunc :=wrap("add")re :=opFunc(2,3)fmt.Println(re)}