Почему вы не можете назвать функцию в 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)? "