所以,今天我在编码时发现创建名为init
的函数会生成错误method init() not found
,但当我将其重命名为startup
时,一切正常。
单词" init"在Go中保留了一些内部操作,或者我在这里遗漏了什么?
答案 0 :(得分:19)
是的,函数init()
很特别。加载包时会自动执行。即使包main
可能包含在实际程序开始之前执行的一个或多个init()
函数:http://golang.org/doc/effective_go.html#init
它是包初始化的一部分,如语言规范中所述:http://golang.org/ref/spec#Package_initialization
它通常用于初始化包变量等。
答案 1 :(得分:9)
您还可以看到在golang/test/init.go
init
时可以获得的不同错误
// 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
管理:
现在在cmd/compile/internal/gc/init.go
:
/*
* 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".
*/
其用法在" When is the init()
function in go (golang) run?"