2014-09-06 114 views
7

所以,今天,當我編碼時,我發現創建一個名稱爲init的函數會生成一個錯誤method init() not found,但是當我將它重命名爲startup時,它一切正常。爲什麼你不能在Go「init」中命名一個函數?

在Go中保留了一些內部操作「init」這個詞還是我在這裏丟失了一些東西?

回答

16

是的,功能init()是特殊的。它在包裝加載時自動執行。連包main可以包含被執行的一個或多個init()功能的實際程序開始之前:http://golang.org/doc/effective_go.html#init

它是包初始化的一部分,如在語言規範說明:http://golang.org/ref/spec#Package_initialization

它通常用於初始化包變量等

+4

請注意,您可以命名一個結構初始化函數,你可以把它叫做所示

/* * a function named init is a special case. * it is called by the initialization before * main is run. to make it unique within a * package and also uncallable, the name, * normally "pkg.init", is altered to "pkg.init·1". */ 

它的使用。 – OneOfOne 2014-09-06 13:39:38

8

你也可以看到不同的錯誤,你可以使用時,你得到initgolang/test/init.go

// Verify that erroneous use of init is detected. 
// Does not compile. 

package main 

import "runtime" 

func init() { 
} 

func main() { 
    init() // ERROR "undefined.*init" 
    runtime.init() // ERROR "unexported.*runtime\.init" 
    var _ = init // ERROR "undefined.*init" 
} 

init本身是由golang/cmd/gc/init.c管理:在「When is the init() function in go (golang) run?

相關問題