Go語(yǔ)言 init函數(shù)的具體使用
init函數(shù)
C語(yǔ)言沒有init函數(shù),C語(yǔ)言一般需要自己去寫init,然后在構(gòu)造函數(shù)中調(diào)用
Go語(yǔ)言自帶init函數(shù),每一個(gè)包都可以包含一個(gè)或多個(gè)init函數(shù)
這個(gè)init會(huì)在包被引用的時(shí)候(import)進(jìn)行自動(dòng)調(diào)用。
init函數(shù)演示
init函數(shù)沒有參數(shù),沒有返回值,原型固定如下
一個(gè)包中包含多個(gè)init時(shí),調(diào)用順序是不確定的。
同一個(gè)包中多個(gè)文件都可以有init函數(shù)。
創(chuàng)建減法函數(shù)包
創(chuàng)建test文件夾。
創(chuàng)建減法文件
在test文件夾中創(chuàng)建sub文件夾,在其中創(chuàng)建sub.go。
示例如下:
package sub import "fmt" // init函數(shù)沒有參數(shù),沒有返回值,原型固定如下 // 一個(gè)包中包含多個(gè)init時(shí),調(diào)用順序是不確定的 func init() { fmt.Println("這個(gè)是 package sub 中的第一個(gè) init()") } func init() { fmt.Println("這個(gè)是 package sub 中的第二個(gè) init()") } func Sub(a, b int) int { return a - b }
創(chuàng)建入口文件調(diào)用
在test文件夾中創(chuàng)建main.go引入并調(diào)用減法函數(shù)。
示例如下:
package main import ( "fmt" "test/sub" ) func main() { res2 := sub.Sub(10, 6) fmt.Println("10-6=", res2) }
運(yùn)行結(jié)果:
這個(gè)是 package sub 中的第一個(gè) init()
這個(gè)是 package sub 中的第二個(gè) init()
10-6= 4
創(chuàng)建減法同級(jí)函數(shù)
在減法函數(shù)文件創(chuàng)建同命名空間函數(shù)文件sub2,并在減法函數(shù)中調(diào)用。
在go語(yǔ)言中,同一層級(jí)目錄,不允許出現(xiàn)多個(gè)包名。
由于Sub2 test2與sub.go在同一個(gè)包下面,所以可以使用,并且不需要sub.形式。
示例如下:
package sub import "fmt" func Sub2() { fmt.Println("Sub2 func") } func test2() { fmt.Println("test func") }
運(yùn)行結(jié)果:
這個(gè)是 package sub 中的第一個(gè) init()
這個(gè)是 package sub 中的第二個(gè) init()
Sub2 func
test func
10-6= 4
_形式
init函數(shù)時(shí)不允許用戶顯式調(diào)用的。
有的時(shí)候引用一個(gè)包,可能只想使用這個(gè)包里面的init函數(shù)(mysq1iinit對(duì)驅(qū)動(dòng)進(jìn)行初始化)
但是不想引用包中的其他函數(shù),為了防止編譯器出錯(cuò),可以使用_形式來處理。
示例如下:
package main import ( //"fmt" _ "test/sub" // 此時(shí)只會(huì)調(diào)用sub里的init函數(shù),編譯還不會(huì)報(bào)錯(cuò)。 ) func main() { //res2 := sub.Sub(10, 6) //fmt.Println("10-6=", res2) }
運(yùn)行結(jié)果:
這個(gè)是 package sub 中的第一個(gè) init()
這個(gè)是 package sub 中的第二個(gè) init()
總結(jié)
到此這篇關(guān)于Go語(yǔ)言 init函數(shù)的具體使用的文章就介紹到這了,更多相關(guān)Go語(yǔ)言 init函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go語(yǔ)言單例模式(Singleton)實(shí)例分析
這篇文章主要介紹了go語(yǔ)言單例模式(Singleton),實(shí)例分析了單例模式的原理與Go語(yǔ)言的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-03-03Go語(yǔ)言映射內(nèi)部實(shí)現(xiàn)及基礎(chǔ)功能實(shí)戰(zhàn)
這篇文章主要為大家介紹了Go語(yǔ)言映射的內(nèi)部實(shí)現(xiàn)和基礎(chǔ)功能實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-03-03Golang的select多路復(fù)用及channel使用操作
這篇文章主要介紹了Golang的select多路復(fù)用及channel使用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12golang 實(shí)現(xiàn)一個(gè)負(fù)載均衡案例(隨機(jī),輪訓(xùn))
這篇文章主要介紹了golang 實(shí)現(xiàn)一個(gè)負(fù)載均衡案例(隨機(jī)、輪訓(xùn)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04Golang實(shí)現(xiàn)秒讀32GB大文件示例步驟
這篇文章主要為大家介紹了Golang實(shí)現(xiàn)秒讀32GB大文件的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12