Назначение до объявления в golang net / http / server. go - PullRequest
0 голосов
/ 15 апреля 2020

Я собирался кодировать в 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 Ответ

3 голосов
/ 15 апреля 2020

Язык spe c объясняет инициализацию переменной следующим образом:

... переменная уровня пакета считается готовой для инициализации, если она еще не инициализирована и не имеет ни выражения инициализации, ни своего Выражение инициализации не зависит от неинициализированных переменных. Инициализация продолжается путем многократной инициализации следующей переменной уровня пакета, которая является самой ранней в порядке объявления и готова к инициализации, пока не будет готовых переменных для инициализации.

https://golang.org/ref/spec#Package_initialization

Итак, сначала инициализируются все переменные без зависимостей, затем переменные в зависимости от инициализированных переменных и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...