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