Допустим, у вас есть пакет mypack
с двумя исходными файлами mypack/a.go
и mypack/b.go
.Оба этих исходных файла зависят друг от друга, но компилятор Go не жалуется.Если вы разделите этот пакет на два, apack/a.go
и bpack/b.go
, компилятор Go скажет import cycle not allowed
.
Мое понимание того, как обрабатываются зависимости пакета, состоит в том, что компилятор построит график импорта,График анализируется и каким-то образом (я бы хотел узнать об алгоритме, который делает это!) Вычисляется порядок компиляции.Порядок не может быть рассчитан, если в графике есть цикл, поэтому компилятор жалуется.
Что я не понимаю, так это то, как компилятор Go может разрешать зависимости между источниками пакета, но не может разрешатьзависимости между пакетами.Если эти два источника зависят друг от друга, тогда вам нужно заняться какой-нибудь сумасшедшей акробатикой и каким-то образом скомпилировать их одновременно.
Может кто-нибудь объяснить мне это?