В соответствии со спецификацией языка Go:
весь код инициализации выполняется в одной процедуре, а функции
init () внутри один пакет выполняется в неуказанном порядке
В вашем случае пакеты Пользователь и Администратор независимы (Пользователь не импортирует Администратора, а Администратор не импортирует Пользователя).Это означает, что:
- две функции init () в User и Admin выполняются в неопределенном порядке
Соединение тел двух функций init () водна функция init () будет выглядеть следующим образом:
func init() {
http.HandleFunc("/", User.Hello)
http.HandleFunc("/admin/", Admin.Hello)
}
Обратите внимание, что не имеет значения, регистрирует ли программа сначала "/"
или "/admin/"
.Таким образом, следующий код также действителен:
func init() {
http.HandleFunc("/admin/", Admin.Hello)
http.HandleFunc("/", User.Hello)
}
Из приведенных выше двух фрагментов кода видно, что нормально вызывать http.HandleFunc("/", ...)
и http.HandleFunc("/admin/", ...)
в неопределенном порядке.
Поскольку "/"
и "/admin/"
могут быть зарегистрированы в любом порядке, и все функции init () выполняются в одной процедуре, ответ на ваш вопрос: Да, такая инициализация правильная.