Go語(yǔ)言中init函數(shù)與匿名函數(shù)使用淺析
init函數(shù)
基本介紹
每一個(gè)源文件都可以包含一個(gè)init函數(shù),該函數(shù)會(huì)在main函數(shù)執(zhí)行前,被Go運(yùn)行框架調(diào)用,也就是說(shuō)init會(huì)在main函數(shù)前被調(diào)用
package main import "fmt" //init函數(shù),通??梢栽趇nit函數(shù)中完成初始化工作 func init() { fmt.Println("init()") } func main() { fmt.Println("main()") } /* init() main() */
注意事項(xiàng)和細(xì)節(jié)
1.如果一個(gè)文件同時(shí)包含全局變量定義,init函數(shù)和main函數(shù),則執(zhí)行的流程是變量定義->init函數(shù)->main函數(shù)
2.init函數(shù)最主要的作用,就是完成一些初始化的工作
案例
如果main.go和utils.go都含有變量定義init函數(shù)時(shí),執(zhí)行的流程又是怎么樣的?
匿名函數(shù)
介紹
Go支持匿名函數(shù),如果我們某個(gè)函數(shù)知識(shí)希望使用一次,可以考慮使用匿名函數(shù),匿名函數(shù)也可以實(shí)現(xiàn)多次調(diào)用。
調(diào)用方式
方式1
在定義匿名函數(shù)時(shí)就直接調(diào)用,這種方式匿名函數(shù)只能調(diào)用一次
package main import ( "fmt" ) func main() { res1 := func ( n1 int, n2 int) int { return n1 + n2 }(10, 20) fmt.Println("res1=", res1) }
方式2
將匿名函數(shù)賦給一個(gè)變量(函數(shù)變量),再通過(guò)變量來(lái)調(diào)用匿名函數(shù)
package main import ( "fmt" ) func main() { //將匿名函數(shù)func (n1 int,n2 int)int賦值給a變量 //則a的數(shù)據(jù)類(lèi)型就是函數(shù)類(lèi)型,此時(shí),我們可以通過(guò)a完成調(diào)用 a := func ( n1 int, n2 int) int { return n1 + n2 } res1 := a(10, 20) fmt.Println("res1=", res1) }
到此這篇關(guān)于Go語(yǔ)言中init函數(shù)與匿名函數(shù)使用淺析的文章就介紹到這了,更多相關(guān)Go init函數(shù)與匿名函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go標(biāo)準(zhǔn)容器之Ring的使用說(shuō)明
這篇文章主要介紹了Go標(biāo)準(zhǔn)容器之Ring的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05golang如何設(shè)置Header Content-type
這篇文章主要介紹了golang如何設(shè)置Header Content-type問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Go語(yǔ)言實(shí)現(xiàn)Snowflake雪花算法
雪花算法產(chǎn)生的背景當(dāng)然是twitter高并發(fā)環(huán)境下對(duì)唯一ID生成的需求,得益于twitter內(nèi)部牛的技術(shù),雪花算法能夠流傳于至今并且被廣泛使用,本文就詳細(xì)的介紹一下,感興趣的可以了解一下2021-06-06golang接口實(shí)現(xiàn)調(diào)用修改(值接收者指針接收者)場(chǎng)景詳解
這篇文章主要為大家介紹了golang接口實(shí)現(xiàn)調(diào)用修改值接收者指針接收者示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08golang中package?is?not?in?GOROOT報(bào)錯(cuò)的真正解決辦法
這篇文章主要給大家介紹了關(guān)于golang中package?is?not?in?GOROOT報(bào)錯(cuò)的真正解決辦法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03Golang實(shí)現(xiàn)單元測(cè)試中的邏輯層
前面我們完成了最麻煩的數(shù)據(jù)層的單元測(cè)試,今天我們來(lái)看看單元測(cè)試中最容易做的一層,數(shù)據(jù)邏輯層,也就是我們通常說(shuō)的 service 或者 biz 等2023-03-03Golang Map實(shí)現(xiàn)賦值和擴(kuò)容的示例代碼
這篇文章主要介紹了Golang Map實(shí)現(xiàn)賦值和擴(kuò)容的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Go中string與[]byte高效互轉(zhuǎn)的方法實(shí)例
string與[]byte經(jīng)常需要互相轉(zhuǎn)化,普通轉(zhuǎn)化會(huì)發(fā)生底層數(shù)據(jù)的復(fù)制,下面這篇文章主要給大家介紹了關(guān)于Go中string與[]byte高效互轉(zhuǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09源碼剖析Golang中singleflight的應(yīng)用
這篇文章主要為大家詳細(xì)介紹了如何利用singleflight來(lái)避免緩存擊穿,并剖析singleflight包的源碼實(shí)現(xiàn)和工作原理,感興趣的可以了解下2024-03-03