這篇“go語言的init()方法如何使用”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“go語言的init()方法如何使用”文章吧。
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)建站專業(yè)提供成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站建設(shè)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!
在go語言中,init()方法用于包的初始化;初始化每個(gè)包后,會自動執(zhí)行init()函數(shù),并且執(zhí)行優(yōu)先級高于主函數(shù)的執(zhí)行優(yōu)先級。init()方法通常用于:1、變量初始化;2、檢查/修復(fù)狀態(tài);3、注冊器;4、運(yùn)行計(jì)算。init()函數(shù)在程序運(yùn)行時(shí),自動自動被調(diào)用執(zhí)行,不能在代碼中主動調(diào)用它。不同包的init函數(shù)按照包導(dǎo)入的依賴關(guān)系決定該初始化函數(shù)的執(zhí)行順序。
Go init函數(shù)的詳細(xì)說明
go語言中init函數(shù)用于包(package)的初始化,該函數(shù)是go語言的一個(gè)重要特性
程序執(zhí)行時(shí)導(dǎo)入包語句會自動觸發(fā)包內(nèi)部init()函數(shù)的調(diào)用。
初始化每個(gè)包后,會自動執(zhí)行init()函數(shù),并且執(zhí)行優(yōu)先級高于主函數(shù)的執(zhí)行優(yōu)先級。
需要注意的是:init()函數(shù)沒有參數(shù),也沒有返回值。
init函數(shù)通常用于:
變量初始化
檢查/修復(fù)狀態(tài)
注冊器
運(yùn)行計(jì)算
init()函數(shù)在程序運(yùn)行時(shí),自動自動被調(diào)用執(zhí)行,不能在代碼中主動調(diào)用它。
包初始化執(zhí)行的順序如下圖所示:
結(jié)果是:
10
Hello 沙河
init()函數(shù)有下面的特點(diǎn):
init函數(shù)是用于程序執(zhí)行前做包的初始化的函數(shù),比如初始化包里的變量等
每個(gè)包可以擁有多個(gè)init函數(shù)
包的每個(gè)源文件也可以擁有多個(gè)init函數(shù)
同一個(gè)包中多個(gè)init函數(shù)的執(zhí)行順序go語言沒有明確的定義(說明)
不同包的init函數(shù)按照包導(dǎo)入的依賴關(guān)系決定該初始化函數(shù)的執(zhí)行順序
init函數(shù)不能被其他函數(shù)調(diào)用,而是在main函數(shù)執(zhí)行之前,自動被調(diào)用
包初始化
為了使用導(dǎo)入的程序包,必須首先對其進(jìn)行初始化。初始化始終在單個(gè)線程中執(zhí)行,并且以程序包依賴關(guān)系的順序執(zhí)行。這由Golang的運(yùn)行時(shí)系統(tǒng)控制,如下圖所示:
初始化導(dǎo)入的包(遞歸導(dǎo)入)
計(jì)算并為塊中聲明的變量分配初始值
在包中執(zhí)行初始化函數(shù)
initial.go
package main
import "fmt"
var _ int64=s()
func init(){
fmt.Println("init function --->")
}
func s() int64{
fmt.Println("function s() --->")
return 1
}
func main(){
fmt.Println("main --->")
}
執(zhí)行結(jié)果
function s() —>
init function —>
main —>
即使程序包被多次導(dǎo)入,初始化也只需要一次。
特性介紹
init函數(shù)不需要傳入?yún)?shù),也不需要返回任何值。與main相比,init沒有聲明,因此無法引用。
package main
import "fmt"
func init(){
fmt.Println("init")
}
func main(){
init()
}
編譯上述函數(shù)“undefined:init
”時(shí)發(fā)生錯(cuò)誤。
每個(gè)源文件可以包含一個(gè)以上的init函數(shù),請記住,寫在每個(gè)源文件中的“行進(jìn)方式”只能包含一個(gè)init函數(shù),這有點(diǎn)不同,因此進(jìn)行下一個(gè)驗(yàn)證。
package main
import "fmt"
func init(){
fmt.Println("init 1")
}
func init(){
fmt.Println("init2")
}
func main(){
fmt.Println("main")
}
/* 實(shí)施結(jié)果:
init1
init2
main */
從上面的示例中,您可以看到每個(gè)源文件可以包含多個(gè)init函數(shù)。
初始化函數(shù)的一個(gè)常見示例是設(shè)置初始表達(dá)式的值。
var precomputed=[20]float64{}
func init(){
var current float64=1
precomputed[0]=current
for i:=1;i<len(precomputed);i++{
precomputed[i]=precomputed[i-1]*1.2
}
}
因?yàn)椴豢赡茉谏厦娴拇a(這是一條語句)中將for循環(huán)用作預(yù)先計(jì)算的值,所以可以使用init函數(shù)來解決此問題。
Go套件匯入規(guī)則的副作用
Go非常嚴(yán)格,不允許引用未使用的軟件包。但是有時(shí)您引用包只是為了調(diào)用init函數(shù)進(jìn)行一些初始化??諛?biāo)識符(即下劃線)的目的是解決此問題。
import _ "image/png"
以上就是關(guān)于“go語言的init()方法如何使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當(dāng)前文章:go語言的init()方法如何使用
分享路徑:http://aaarwkj.com/article36/iipisg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站營銷、網(wǎng)站改版、品牌網(wǎng)站設(shè)計(jì)、商城網(wǎng)站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)