Есть ли способ получить ВСЕ пакеты и зависимости программ Go в данном каталоге и его подкаталогах, используя стандартный инструментарий Go?

# #go #dependencies

Вопрос:

У меня есть большой каталог пакетов Go, который на самом деле является моим каталогом $ GOPATH / src. Я пытаюсь получить список всех пакетов (и их версий, в конечном счете, если это возможно, но даже имена были бы хорошим началом) во всех подкаталогах этого каталога рекурсивно (включая каталоги поставщиков). Когда я запускаю go list all ./... в $ GOPATH / src, я получаю кучу сообщений::

код в каталоге [foo] ожидает импорта [bar]

Однако, если я перейду к рабочим каталогам отдельных пакетов, это, похоже, сработает. Я также не уверен, почему он действительно находит пакеты в приведенной выше команде, но отображает эту ошибку, которую он не отображает, когда я перехожу к каталогу каждого пакета. Есть ли способ указать такой рекурсивный поиск с помощью набора инструментов Go?

Ответ №1:

Я также не уверен, почему он на самом деле находит пакеты в приведенной выше команде, но отображает эту ошибку, которую он не отображает, когда я перехожу к каталогу каждого пакета

Это, по-видимому, является следствием src/cmd/go/internal/load/pkg.go

         if !cfg.ModulesEnabled amp;amp; data.err == nil amp;amp;
            data.p.ImportComment != "" amp;amp; data.p.ImportComment != path amp;amp;
            !strings.Contains(path, "/vendor/") amp;amp; !strings.HasPrefix(path, "vendor/") {
            data.err = fmt.Errorf("code in directory %s expects import %q", data.p.Dir, data.p.ImportComment)
        }
 

В проекте без поддержки модуля с vendor/ пакетами вы получите эту ошибку (в отличие от той же команды, выполняемой внутри vendor папки, которая не вызовет условие, показанное выше)