golang如何通過type定義函數(shù)類型
函數(shù)簽名
定義
函數(shù)類型 又叫 函數(shù)簽名 , 一個(gè)函數(shù) 的類型就是函數(shù)定義首行去掉函數(shù)名、參數(shù)名和{,可以 使用 fmt.Printf 的”%T”格式化參數(shù)打印函數(shù)的類型。
函數(shù)類型相同
兩個(gè)函數(shù)類型相同的條件是:擁有相同的形參列表和返回值列表(列表元素的次序、個(gè)數(shù)和類型都相同),形參名可以不同 。
以下 3 個(gè)函數(shù)的函數(shù)類型完全一樣。
func add (a , b int) int { return a + b }
func sub (c int, d int) int { return c - d }
func mul (e int, f int) int { return e * f }
舉個(gè)栗子
新建test.go
package main
import "fmt"
func add(a, b int) int { return a + b }
func sub(c int, d int) int { return c - d }
func mul(e int, f int) int { return e * f }
func main() {
fmt.Printf("%T\n", add)
fmt.Printf("%T\n", sub)
fmt.Printf("%T\n", mul)
}
執(zhí)行g(shù)o run test.go輸出結(jié)果如下:
func(int, int) int
func(int, int) int
func(int, int) int
通過type定義函數(shù)類型
通過 type 可以定義函數(shù)類型,格式如下
type typeName func(arguments) retType
函數(shù)類型也是一種類型,故可以將其定義為函數(shù)入?yún)?,?go 語言中函數(shù)名可以看做是函數(shù)類型的常量,所以我們可以直接將函數(shù)名作為參數(shù)傳入的函數(shù)中。
package main
import "fmt"
func add(a, b int) int {
return a + b
}
//sub作為函數(shù)名可以看成是 op 類型的常量
func sub(a, b int) int {
return a - b
}
//定義函數(shù)類型 op
type op func(a, b int) int
//形參指定傳入?yún)?shù)為函數(shù)類型op
func Oper(fu op, a, b int) int {
return fu(a, b)
}
func main() {
//在go語言中函數(shù)名可以看做是函數(shù)類型的常量,所以我們可以直接將函數(shù)名作為參數(shù)傳入的函數(shù)中。
aa := Oper(add, 1, 2)
fmt.Println(aa)
bb := Oper(sub, 1, 2)
fmt.Println(bb)
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
go開源項(xiàng)目用戶名密碼驗(yàn)證的邏輯鬼才寫法
詳解Go語言Slice作為函數(shù)參數(shù)的使用
Golang兩行代碼實(shí)現(xiàn)發(fā)送釘釘機(jī)器人消息

