首頁 > 後端開發 > Golang > 主體

一文解析Golang中的init ()函數

青灯夜游
發布: 2022-10-26 19:17:36
轉載
3647 人瀏覽過

一文解析Golang中的init ()函數

Go init函數的詳細說明

初始化每個套件後,會自動執行init()函數,並且執行優先權高於主函數的執行優先權。 【相關推薦:Go影片教學

init函數通常用於:

  • 變數初始化
  • ##檢查/修復狀態
  • 註冊器
  • 運行計算

套件初始化

為了使用導入的套件,必須先對其進行初始化。初始化始終在單一執行緒中執行,並且以程式包依賴關係的順序執行。這由Golang的運行時系統控制,如下圖所示:

    初始化導入的包(遞歸導入)
  • 計算並為區塊中聲明的變數分配初始值
  • 在套件中執行初始化函數

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 --->")
}
登入後複製

執行結果

function s() —>

init function —>
main —>

即使套件被多次導入,初始化也只需要一次。

特性

init函數不需要傳入參數,也不需要傳回任何值。與main相比,init沒有聲明,因此無法引用。

package main
import "fmt"
func init(){
  fmt.Println("init")
}
func main(){
  init()
}
登入後複製

編譯上述函數「

undefined:init」時發生錯誤。

每個原始檔案可以包含一個以上的init函數,請記住,寫在每個原始檔案中的「行進方式」只能包含一個init函數,這有點不同,因此進行下一個驗證。

package main
import "fmt"
func init(){
  fmt.Println("init 1")
}
func init(){
  fmt.Println("init2")
}
func main(){
  fmt.Println("main")
}
/* 实施结果:
init1
init2
main */
登入後複製

從上面的範例中,您可以看到每個來源檔案可以包含多個init函數。

初始化函數的一個常見範例是設定初始表達式的值。

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
  }
}
登入後複製

因為不可能在上面的程式碼(這是一條語句)中將for迴圈用作預先計算的值,所以可以使用init函數來解決此問題。

Go套件匯入規則的副作用

Go非常嚴格,不允許引用未使用的軟體包。但是有時您引用套件只是為了呼叫init函數進行一些初始化。空標識符(即下劃線)的目的是解決此問題。

import _ "image/png"
登入後複製

摘要

以上是本文的全部。希望本文的內容對您的學習或工作具有參考價值。

原文網址:https://developpaper.com/detailed-explanation-of-init-function-in-go-language/

翻譯網址:https://learnku .com/go/t/47178

更多程式相關知識,請造訪:

程式設計影片! !

以上是一文解析Golang中的init ()函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板