Функция запуска в Go
Функция без параметров с особым именем
выполняется сама, еще до точки входа.
Ее не вызывают из main:
среда запуска находит все такие функции в
пакете и выполняет их при старте программы.
У одного пакета может быть несколько функций запуска в разных файлах. Порядок между файлами не стоит использовать для логики, но для простой инициализации этого достаточно.
Добавим печать из функции запуска и из main:
package main
import "fmt"
func init() {
fmt.Println("init")
}
func main() {
fmt.Println("main")
}
На экране сначала строка "init", затем
"main". Функция запуска отработала
раньше точки входа, хотя в исходнике она
записана выше main не по смыслу, а
по правилу языка.
Так же ведут себя функции запуска в подключенных
пакетах: они выполняются до main в
main, пока компилятор собирает все
дерево импортов. В своих пакетах ими часто
регистрируют настройки или проверяют данные
до первого сценария.
Дан следующий код:
package main
import "fmt"
func init() {
fmt.Println("a")
}
func main() {
fmt.Println("b")
}
Напишите, в каком порядке появятся две строки на экране.
Добавьте вторую функцию запуска в setup.go
с package main, которая печатает
"setup", и запустите программу.
Скажите, можно ли вызвать функцию запуска
вручную из main как обычную функцию.