Почему вы не можете назвать функцию в Go "init"?
Итак, сегодня, когда я был в кодировке, выяснилось, что создание функции с именем init
вызвало ошибку method init() not found
, но когда я переименовал ее в startup
, все было нормально.
Является ли слово "init" сохраненным для некоторой внутренней операции в Go или am, я здесь что-то упустил?
Ответы
Ответ 1
Да, функция init()
является специальной. Он автоматически запускается при загрузке пакета. Даже пакет main
может содержать одну или несколько функций init()
, которые выполняются до начала реальной программы: http://golang.org/doc/effective_go.html#init
Это часть инициализации пакета, как описано в спецификации языка: http://golang.org/ref/spec#Package_initialization
Он обычно используется для инициализации переменных пакета и т.д.
Ответ 2
Вы также можете увидеть различные ошибки, которые вы можете получить при использовании init
в golang/test/init.go
Теперь cmd/compile/internal/gc/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
:
/*
* 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".
*/
Его использование иллюстрируется в " Когда запускается функция init()
в go (golang)? "