Go語(yǔ)言的type?func()用法詳解
一、前置基礎(chǔ)
1. go 函數(shù)基礎(chǔ)
在Go語(yǔ)言中,函數(shù)的基本組成為:關(guān)鍵字func、函數(shù)名、參數(shù)列表、返回值、函數(shù)體和返回語(yǔ)句。
func 函數(shù)名(參數(shù)列表) 返回值類型 {函數(shù)體內(nèi)部}
Go語(yǔ)言是強(qiáng)數(shù)據(jù)類型的語(yǔ)言,參數(shù)是要指定類型的不然就報(bào)錯(cuò)。func 是函數(shù)的聲明關(guān)鍵字。
1) 返回值
返回值的定義,是可以給返回值取一個(gè)名稱的,還有一點(diǎn)是和其他的編程語(yǔ)言不一樣的是在Go語(yǔ)言中函數(shù)的返回值可以有多個(gè)的
func addTwoNumber(a int, b int) (int, int) { return a+b, a-b }
同時(shí)可以給返回值取一個(gè)別名
func addTwoNumber(a int, b int) (sum, dif int) { return a+b, a-b }
像這樣給返回值取完名字后可以給返回值直接賦值
func addTwoNumber(a int, b int) (sum, dif int) { sum = a+b dif = a-b return }
同樣這樣也是可以直接返回sum,和dif兩個(gè)值的。
2) 函數(shù)可變參數(shù)
func sum(numbers ...int) int { s := 0 for i := range numbers{ s += i }r eturn s }f unc main() { fmt.Println(sum(1,2,3,4,5)) }
像這樣我們就可以傳給sum函數(shù)多個(gè)值了。
2. 函數(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 }
驗(yàn)證demo
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
二、Go語(yǔ)言的type func()用法 | type func() 自定義函數(shù)類型
1. golang通過(guò)type定義函數(shù)類型
在 Go 語(yǔ)言中,type 可以定義任何自定義的類型
比如熟悉的:type dog struct{},type myInt int 等等
所以 func 也是可以作為類型自定義的,type myFunc func(int) int,意思是自定義了一個(gè)叫 myFunc 的函數(shù)類型,這個(gè)函數(shù)的簽名必須符合輸入為 int,輸出為 int。
golang通過(guò)type定義函數(shù)類型
通過(guò) type 可以定義函數(shù)類型,格式如下
type typeName func(arguments) retType
函數(shù)類型也是一種類型,故可以將其定義為函數(shù)入?yún)?/strong>,在 go 語(yǔ)言中函數(shù)名可以看做是函數(shù)類型的常量,所以我們可以直接將函數(shù)名作為參數(shù)傳入的函數(shù)中。
驗(yàn)證demo
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)
到此這篇關(guān)于Go語(yǔ)言的type func()用法的文章就介紹到這了,更多相關(guān)Go語(yǔ)言type func()用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang中context庫(kù)的高級(jí)應(yīng)用
context庫(kù)不僅對(duì)于提升代碼的效率和性能至關(guān)重要,而且還幫助開(kāi)發(fā)者在復(fù)雜的系統(tǒng)中保持代碼的清晰和可維護(hù)性,下面我們就來(lái)看看context庫(kù)的高級(jí)應(yīng)用吧2024-01-01goroutine?泄漏和避免泄漏實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了goroutine?泄漏和避免泄漏實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12簡(jiǎn)單對(duì)比一下?C語(yǔ)言?與?Go語(yǔ)言
這篇文章主要介紹了簡(jiǎn)單對(duì)比一下?C語(yǔ)言?與?Go語(yǔ)言的相關(guān)資料,需要的朋友可以參考下2023-08-08一文帶你了解Go語(yǔ)言中函數(shù)設(shè)計(jì)的實(shí)踐示例
良好設(shè)計(jì)的函數(shù)具有清晰的職責(zé)和邏輯結(jié)構(gòu),提供準(zhǔn)確的命名和適當(dāng)?shù)膮?shù)控制,下面我們將一一描述函數(shù)設(shè)計(jì)時(shí)能夠遵循的最佳實(shí)踐,希望對(duì)大家有所幫助2023-06-06Go語(yǔ)言七篇入門教程七GC垃圾回收三色標(biāo)記
這篇文章主要為大家介紹了Go語(yǔ)言教程關(guān)于GC垃圾回收三色標(biāo)記的示例詳解,本篇文章是Go語(yǔ)言七篇入門教程系列文章,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11go實(shí)現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例
本文主要介紹了go實(shí)現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Go實(shí)現(xiàn)MD5加密的三種方法小結(jié)
本文主要介紹了Go實(shí)現(xiàn)MD5加密的三種方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03GO語(yǔ)言的控制語(yǔ)句詳解包括GO語(yǔ)言的指針語(yǔ)法
這篇文章主要介紹了GO語(yǔ)言的控制語(yǔ)句詳解包括GO語(yǔ)言的指針語(yǔ)法,GO語(yǔ)言switch結(jié)構(gòu),GO語(yǔ)言for的4種結(jié)構(gòu)需要的朋友可以參考下2022-12-12Go語(yǔ)言LeetCode題解1046最后一塊石頭的重量
這篇文章主要為大家介紹了Go語(yǔ)言LeetCode題解1046最后一塊石頭的重量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Go在GoLand中引用github.com中的第三方包具體步驟
這篇文章主要給大家介紹了關(guān)于Go在GoLand中引用github.com中第三方包的具體步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Go具有一定的參考價(jià)值,需要的朋友可以參考下2024-01-01