婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go語言init函數(shù)詳解

Go語言init函數(shù)詳解

熱門標簽:地圖標注的汽車標 高德地圖標注口訣 學海導航地圖標注 浙江高速公路地圖標注 廣州呼叫中心外呼系統(tǒng) 南通如皋申請開通400電話 江西轉化率高的羿智云外呼系統(tǒng) 西部云谷一期地圖標注 中國地圖標注省會高清

Go init函數(shù)詳解

init()函數(shù)會在每個包完成初始化后自動執(zhí)行,并且執(zhí)行優(yōu)先級比main函數(shù)高。init 函數(shù)通常被用來:

  • 對變量進行初始化
  • 檢查/修復程序的狀態(tài)
  • 注冊
  • 運行一次計算

包的初始化

為了使用導入的包,首先必須將其初始化。初始化總是以單線程執(zhí)行,并且按照包的依賴關系順序執(zhí)行。這通過Golang的運行時系統(tǒng)控制,如下圖所示:

  • 初始化導入的包(遞歸導入)
  • 對包塊中聲明的變量進行計算和分配初始值
  • 執(zhí)行包中的init函數(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í)行結果

function s() --->
init function --->
main --->

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

特性

init函數(shù)不需要傳入?yún)?shù),也不會返回任何值。與main相比而言,init沒有被聲明,因此也不能被引用。

package main
import "fmt"
func init(){
  fmt.Println("init")
}
func main(){
  init()
}

在編譯上面的函數(shù)時,會出錯“undefined:init”。

每個源文件中可以包含多個init函數(shù),記得《the way to go》中寫的是每個源文件只能包含一個init函數(shù),這有點出入,所以下面驗證下。

package main
import "fmt"
func init(){
  fmt.Println("init 1")
}
func init(){
  fmt.Println("init2")
}
func main(){
  fmt.Println("main")
}
/*執(zhí)行結果:
init1
init2
main */

從上面的例子中,可以看出每個源文件可以包含多個init函數(shù)。

init函數(shù)常用的一個例子就是用來設置初始表達式的值。

var precomputed=[20]float64{}
func init(){
  var current float64=1
  precomputed[0]=current
  for i:=1;ilen(precomputed);i++{
    precomputed[i]=precomputed[i-1]*1.2
  }
}

因為上面代碼中不可能用for循環(huán)來作為precomputed的值(這是一句聲明),因此可以用init函數(shù)來解決這個問題。

Go包導入規(guī)則的副作用

Go要求非常嚴格,不允許引用不使用的包。但是有時你引用包只是為了調用init函數(shù)去做一些初始化工作。此時空標識符(也就是下劃線)的作用就是為了解決這個問題。

import _ "image/png"

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

您可能感興趣的文章:
  • 淺談golang package中init方法的多處定義及運行順序問題
  • 為什么不建議在go項目中使用init()
  • go語言的初始化順序,包,變量,init詳解
  • GO語言ini配置文件的讀取的操作

標簽:德宏 吐魯番 許昌 曲靖 東營 保定 貴州 常州

巨人網(wǎng)絡通訊聲明:本文標題《Go語言init函數(shù)詳解》,本文關鍵詞  語言,init,函數(shù),詳解,語言,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go語言init函數(shù)詳解》相關的同類信息!
  • 本頁收集關于Go語言init函數(shù)詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 高碑店市| 博白县| 三穗县| 清涧县| 黔江区| 缙云县| 尚志市| 万州区| 常德市| 南安市| 绥江县| 乌鲁木齐市| 高淳县| 三原县| 大冶市| 夹江县| 桐庐县| 措美县| 太仓市| 田阳县| 昌江| 芦溪县| 昌黎县| 揭东县| 眉山市| 永嘉县| 闽清县| 关岭| 大同市| 贡觉县| 开封县| 马公市| 闽侯县| 武乡县| 名山县| 万盛区| 丰都县| 大姚县| 来凤县| 云阳县| 禹州市|