Я собирался кодировать в golang net / http / server.go и нашел следующий код по адресу https://github.com/golang/go/blob/96745b980cfde139e8611772e2bc0c59a8e6cdf7/src/net/http/server.go#L2208
// DefaultServeMux is the default ServeMux used by Serve.
var DefaultServeMux = &defaultServeMux
var defaultServeMux ServeMux
Здесь мы видим, что указатель defaultServerMux назначается до того, как он будет объявлен в следующей строке. Я не пробовал создавать его сам, но это из коммита релиза. Как это здесь работает?
1 ответ
Спецификация языка объясняет инициализацию переменных следующим образом:
... переменная уровня пакета считается готовой к инициализации, если она еще не инициализирована и либо не имеет выражения инициализации, либо ее выражение инициализации не зависит от неинициализированных переменных. Инициализация продолжается путем многократной инициализации следующей переменной уровня пакета, которая является самой ранней в порядке объявления и готова к инициализации, до тех пор, пока не останется переменных, готовых к инициализации.
https://golang.org/ref/spec#Package_initialization
Итак, сначала инициализируются все переменные без зависимостей, затем переменные, зависящие от инициализированных переменных, и так далее.
Похожие вопросы
Новые вопросы
go
Go - это язык программирования с открытым исходным кодом. Он статически типизирован, с синтаксисом, свободно полученным из C, с добавлением автоматического управления памятью, безопасностью типов, некоторыми возможностями динамической типизации, дополнительными встроенными типами, такими как массивы переменной длины (называемые слайсами) и сопоставления ключ-значение, и большая стандартная библиотека.