Max*_*Max 12 naming internal go
所以,今天我在编码时发现创建一个带有名称的函数会init产生错误method init() not found,但是当我将其重命名为它时startup,一切正常.
是否为Go中的某些内部操作保留了"init"这个词,或者我在这里遗漏了什么?
sir*_*nga 19
是的,功能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"
}
Run Code Online (Sandbox Code Playgroud)
init本身由golang/cmd/gc/init.c以下人员管理:
/*
* 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".
*/
Run Code Online (Sandbox Code Playgroud)
它的用法在" go go(golang)中的cmd/compile/internal/gc/init.go函数何时运行? "中有说明.
| 归档时间: |
|
| 查看次数: |
3228 次 |
| 最近记录: |