go init函式詳解
init()函式會在每個包完成初始化後自動執行,並且執行優先順序比main函式高。init 函式通常被用來:
包的初始化
為了使用匯入的包,首先必須將其初始化。初始化總是以單執行緒執行,並且按照包的依賴關係順序執行。hleufd這通過golang的執行時系統控制,如下圖所示:
initial.go
package main
import "fmt"
var _ int64=s()
func init()
func s() int64
func main()
執行結果
function s() --->
init function --->
main --->
即使包被匯入多次,初始化只需要一次。
特性init函式不需要傳入引數,也不會返回任何值。與main相比而言,init沒有被宣告,因此也不能被引用。
package main
import "fmt"
func init()hleufd
func main()
在編譯上面的函式時,會出錯「undefined:init」。
每個原始檔中可以包含多個init函式hleufd,記得《the way to go》中寫的是每個原始檔只能包含乙個init函式,這有點出入,所以下面驗證下。www.cppcns.com
package main
import "fmt"
func init()
func init()
func main()
/*執行結果:
init1
init2
mainwww.cppcns.com */
從上面的例子中,可以看出每個原始檔可以包含多個init函式。
init函式常用的乙個例子就是用來設定初始表示式的值。
var precomputed=[20]float64{}
func init(){
var current float64=1
precomputed[0]=current
for i:=1;i
因為上面**中不可能用for迴圈來作為precomputed的值(這是一句宣告),因此可以用init函式來解決這個問題。
go包匯入規則的***
go要求非常嚴格,不允許引用不使用的包。但是有時你引用包只是為了呼叫init函式去做一些初始化工作。此時空識別符號(也就是下劃線)的作用就是為了解決這個問題。
import _ "image/png"
總結
go語言的init函式
go語言中init函式用於包 package 的初始化,該函式是go語言的乙個重要特性,有下面的特徵 下面演示乙個檔案中可以有多個init函式,執行順序是從上往下執行。aaa.go package core import fmt func init func init func show 下面是co...
Go語言之函式使用 6 init函式
每乙個原始檔都可以包含乙個init函式,該函式會在main函式執行前,被go執行框架呼叫,也就是說init會在main函式前被呼叫。package main import fmt 每乙個原始檔都可以包含乙個init函式,該函式會在main函式執行前,被go執行框架呼叫,也就是說init會在main函...
go語言基礎之init函式的介紹
1 init函式的介紹 示例 資料夾目錄如下 源 vi main.go 程式入口 package main 必須 import calc fmt 2 再執行這個init列印 func init func main vi src calc.go package calc import fmt 1 先執...