为什么你不能在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

它通常用于初始化包变量等

+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

你也可以看到不同的错误,你可以使用时,你得到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?