所以,今天,當我編碼時,我發現創建一個名稱爲init
的函數會生成一個錯誤method init() not found
,但是當我將它重命名爲startup
時,它一切正常。爲什麼你不能在Go「init」中命名一個函數?
在Go中保留了一些內部操作「init」這個詞還是我在這裏丟失了一些東西?
所以,今天,當我編碼時,我發現創建一個名稱爲init
的函數會生成一個錯誤method init() not found
,但是當我將它重命名爲startup
時,它一切正常。爲什麼你不能在Go「init」中命名一個函數?
在Go中保留了一些內部操作「init」這個詞還是我在這裏丟失了一些東西?
是的,功能init()
是特殊的。它在包裝加載時自動執行。連包main
可以包含被執行的一個或多個init()
功能的實際程序開始之前:http://golang.org/doc/effective_go.html#init
它是包初始化的一部分,如在語言規範說明:http://golang.org/ref/spec#Package_initialization
它通常用於初始化包變量等
你也可以看到不同的錯誤,你可以使用時,你得到init
在golang/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?」
請注意,您可以命名一個結構初始化函數,你可以把它叫做所示
它的使用。 – OneOfOne 2014-09-06 13:39:38