Go модули установки Go инструменты - PullRequest
0 голосов
/ 19 ноября 2018

Я использую модули go в качестве управления зависимостями, и у меня возникла проблема с установкой чего-то подобного:

go get -u github.com/go-critic/go-critic/...

Результат сверху был:

go: cannot find main module; see 'go help modules'

Ответы [ 5 ]

0 голосов
/ 02 августа 2019

Несколько других ответов здесь устарели на этом этапе.

Существует как минимум два случая, которые нужно рассмотреть:

Случай 1

Вы хотите установитьинструмент, но вы не хотите изменять текущий go.mod, чтобы отслеживать этот инструмент как зависимость.

Короче говоря, с Go 1.12 или 1.13, самое простое решение - cd для каталога безgo.mod, например:

$ cd /tmp
$ go get github.com/some/tool@v1.0.1

В качестве альтернативы, gobin - это модульная команда для установки или запуска двоичных файлов, которая обеспечивает дополнительную гибкость, включая возможность установки без изменения вашегоgo.mod

текущего модуля * См. связанный ответ для получения более подробной информации, включая решение для Go 1.11, а также вероятную новую опцию в Go 1.14 для получения инструмента без обновления вашегоgo.mod.

Случай 2

С другой стороны, если вы хотите явно отслеживать инструмент как версионную зависимость в go.mod, см. «Как отслеживать зависимости инструментадля модуля? " FAQ по модулям wiki.

Короче говоря, вы создаете файл tools.go в отдельном пакете и устанавливаете тег сборки // +build tools, например:

// +build tools

package tools

import (
    _ "golang.org/x/tools/cmd/stringer"
)

Операторы импорта позволяют команде go точно записывать информацию о версии ваших инструментов в go.mod вашего модуля, в то время как ограничение сборки // +build tools не позволяет вашим обычным сборкам фактически импортировать ваши инструменты.

0 голосов
/ 28 мая 2019

Просто была такая же проблема на go1.11.2. Пытался установить GO111MODULE=on, но это не могло исправить.

Мое решение:

  1. Обновление до версии 1.12.5: https://golang.org/doc/install?download=go1.12.5.linux-amd64.tar.gz

    Это может решить go: cannot find main module; see 'go help modules' проблему.

  2. Тогда я получил еще одну проблему go: cannot use path@version syntax in GOPATH mode,

    , который может быть разрешен настройкой env GO111MODULE=on

0 голосов
/ 21 ноября 2018

Редактировать: Оригинальный ответ в данном документе конкретно относится к состоянию оснастки в Go 1.11.Начиная с выпуска Go 1.12, это больше не является точным.Пожалуйста, смотрите этот ответ и те, на которые он ссылается, для получения подробной информации об обработке этой ситуации в Go 1.12 и более поздних версиях.

Если GO111MODULE var установлен в on вы должны быть внутри инициализированного дерева каталогов модуля go, чтобы использовать go get, даже если вы пытаетесь получить инструмент вместо новой зависимости .Это известная и широко обсуждаемая проблема:

https://github.com/golang/go/issues/27643

https://github.com/golang/go/issues/24250

https://github.com/golang/go/issues/25922

Краткосрочное решение состоит в том, чтобызапустить GO111MODULE=off go get <tool>.Это явно отключает поддержку модуля, даже если вы в данный момент находитесь в пакете модуля, и вынуждает его использовать только вашу GOPATH.

В долгосрочной перспективе выяснение того, что является лучшим решением для поддержки установки инструмента с помощью go get (или другой команды, например, go install с флажком), является предметом постоянных дискуссий, в которых мало что происходит.установленный консенсус на данный момент.Тем не менее, существует PR open для Go 1.12, который, если он будет принят, позволит go get просто работать, находясь вне модуля, даже с установленным GO111MODULE=on.

0 голосов
/ 14 января 2019

С Go 1.12 (февраль 2019), GO111MODULE=on go get будет работать.
выпуск 24250 )

Модули

Когда для GO111MODULE установлено значение on, команда go теперь поддерживает операции с поддержкой модулей вне каталога модуля, при условии, что этим операциям не нужно разрешать пути импорта относительно текущего каталога или явно редактироватьфайл go.mod.
Команды, такие как go get, go list и go mod download, ведут себя как в модуле с изначально пустыми требованиями.
В этом режиме go env GOMOD сообщает об отсутствии системыустройство (/dev/null или NUL).

0 голосов
/ 19 ноября 2018

Попробуйте эту команду GO111MODULE=on go get -u github.com/go-critic/go-critic/...

...