golang如何通過(guò)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
通過(guò)type定義函數(shù)類型
通過(guò) type 可以定義函數(shù)類型,格式如下
type typeName func(arguments) retType
函數(shù)類型也是一種類型,故可以將其定義為函數(shù)入?yún)?,?go 語(yǔ)言中函數(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語(yǔ)言中函數(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語(yǔ)言中的I/O接口設(shè)計(jì)
I/O?操作在編程中扮演著至關(guān)重要的角色,它涉及程序與外部世界之間的數(shù)據(jù)交換,下面我們就來(lái)簡(jiǎn)單了解一下Go語(yǔ)言中的?I/O?接口設(shè)計(jì)吧2023-06-06Golang Http請(qǐng)求返回結(jié)果處理
本文主要介紹了Golang Http請(qǐng)求返回結(jié)果處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Go語(yǔ)言實(shí)現(xiàn)百萬(wàn)級(jí)WebSocket連接架構(gòu)設(shè)計(jì)及服務(wù)優(yōu)化
本文將詳細(xì)介紹如何在Go中構(gòu)建一個(gè)能夠支持百萬(wàn)級(jí)WebSocket連接的服務(wù),包括系統(tǒng)架構(gòu)設(shè)計(jì)、性能優(yōu)化策略以及具體的實(shí)現(xiàn)步驟和代碼示例2024-01-01Golang實(shí)現(xiàn)異步上傳文件支持進(jìn)度條查詢的方法
這篇文章主要介紹了Golang實(shí)現(xiàn)異步上傳文件支持進(jìn)度條查詢的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Golang內(nèi)存模型教科書(shū)級(jí)講解
go官方介紹go內(nèi)存模型的時(shí)候說(shuō):探究在什么條件下,goroutine?在讀取一個(gè)變量的值的時(shí),能夠看到其它?goroutine?對(duì)這個(gè)變量進(jìn)行的寫(xiě)的結(jié)果,Go內(nèi)存模型規(guī)定了一些條件,在這些條件下,在一個(gè)goroutine中讀取變量返回的值能夠確保是另一個(gè)goroutine中對(duì)該變量寫(xiě)入的值2023-03-03golang基于Mutex實(shí)現(xiàn)可重入鎖
鎖可重入也就是當(dāng)前已經(jīng)獲取到鎖的goroutine繼續(xù)調(diào)用Lock方法獲取鎖,Go標(biāo)準(zhǔn)庫(kù)中提供了sync.Mutex實(shí)現(xiàn)了排他鎖,但并不是可重入的,所以本文給大家介紹了golang基于Mutex實(shí)現(xiàn)可重入鎖,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2024-03-03go內(nèi)存緩存如何new一個(gè)bigcache對(duì)象示例詳解
這篇文章主要為大家介紹了go內(nèi)存緩存如何new一個(gè)bigcache對(duì)象示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例
這篇文章主要介紹了golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04