Не могу найти пакет от $GOROOT и $GOPATH

Небольшая часть ошибки, которую я получаю после попытки запустить команду go build

go build ./...
trillian.pb.go:7:8: cannot find package "github.com/golang/protobuf/proto" in any of:
    /usr/local/go/src/github.com/golang/protobuf/proto (from $GOROOT)
    /Projects/Proj1/trillian/src/github.com/golang/protobuf/proto (from $GOPATH)

trillian.pb.go:11:8: cannot find package "github.com/golang/protobuf/ptypes/any" in any of:
    /usr/local/go/src/github.com/golang/protobuf/ptypes/any (from $GOROOT)
    /Projects/Proj1/trillian/src/github.com/golang/protobuf/ptypes/any (from $GOPATH)

trillian_admin_api.pb.go:12:8: cannot find package "github.com/golang/protobuf/ptypes/empty" in any of:
    /usr/local/go/src/github.com/golang/protobuf/ptypes/empty (from $GOROOT)
    /Projects/Proj1/trillian/src/github.com/golang/protobuf/ptypes/empty (from $GOPATH)

trillian.pb.go:10:8: cannot find package "github.com/google/trillian/crypto/sigpb" in any of:
    /usr/local/go/src/github.com/google/trillian/crypto/sigpb (from $GOROOT)
    /Projects/Proj1/trillian/src/github.com/google/trillian/crypto/sigpb (from $GOPATH)

trillian_admin_api.pb.gw.go:17:2: cannot find package "github.com/grpc-ecosystem/grpc-gateway/runtime" in any of:
    /usr/local/go/src/github.com/grpc-ecosystem/grpc-gateway/runtime (from  $GOROOT)
    /Projects/Proj1/trillian/src/github.com/grpc-ecosystem/grpc-gateway/runtime (from $GOPATH)

trillian_admin_api.pb.gw.go:18:2: cannot find package "github.com/grpc-ecosystem/grpc-gateway/utilities" in any of:
    /usr/local/go/src/github.com/grpc-ecosystem/grpc-gateway/utilities (from $GOROOT)
    /Projects/Proj1/trillian/src/github.com/grpc-ecosystem/grpc-gateway/utilities (from $GOPATH)

trillian_admin_api.pb.go:15:2: cannot find package "golang.org/x/net/context" in any of:
    /usr/local/go/src/golang.org/x/net/context (from $GOROOT)
    /Projects/Proj1/trillian/src/golang.org/x/net/context (from $GOPATH)

trillian_admin_api.pb.go:10:8: cannot find package "google.golang.org/genproto/googleapis/api/annotations" in any of:
    /usr/local/go/src/google.golang.org/genproto/googleapis/api/annotations (from $GOROOT)
    /Projects/Proj1/trillian/src/google.golang.org/genproto/googleapis/api/annotations (from $GOPATH)

trillian_log_api.pb.go:65:8: cannot find package "google.golang.org/genproto/googleapis/rpc/status" in any of:
    /usr/local/go/src/google.golang.org/genproto/googleapis/rpc/status (from $GOROOT)
    /Projects/Proj1/trillian/src/google.golang.org/genproto/googleapis/rpc/status (from $GOPATH)

trillian_admin_api.pb.go:11:8: cannot find package "google.golang.org/genproto/protobuf/field_mask" in any of:
    /usr/local/go/src/google.golang.org/genproto/protobuf/field_mask (from $GOROOT)
    /Projects/Proj1/trillian/src/google.golang.org/genproto/protobuf/field_mask (from $GOPATH)

Go env output

GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/Projects/Proj1/trillian"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build690359699=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"

GOPATH а также GOROOT установлены, но все еще не может выполнить команду без ошибок. Пробовал устанавливать в домашние и пользовательские каталоги, меняя gopath и goroot независимо, но все равно не повезло. Любые предложения, как решить эту проблему?

8 ответов

Все импортированные пакеты сначала просматриваются в переменных окружения GOROOT и GOPATH. Убедитесь, что ваш пакет находится где-то под этими каталогами.

Теперь предположим, что GOPATH установлен в: /Users/test/Desktop/GoProject

и GOROOT: / usr / local / go (где установлен go) . Если файл в вашем GoProject имеет пакет, импортированный как

import "abc/def/packageName"

тогда он должен присутствовать в любом из следующих двух мест:

/ Users / test / Desktop / GoProject/ src / abc / def / packageName / */ usr / local / go/ src / abc / def / packageName / *

Если нет, вы получите ошибку, как указано в вопросе.

Файлы внутри этих каталогов будут иметь первую строку как

package packageName

заявляя, что все эти файлы составляют пакет packageName

Как говорится в официальном документе:

Самый простой способ - запустить go get -u github.com/golang/protobuf/{proto,protoc-gen-go},

Смотрите полное введение здесь: установка https://github.com/golang/protobuf.

Я установил go get -u github.com/golang/protobuf/{proto,protoc-gen-go} в свой терминал

Затем сделал go mod init example.com/filename, это создало файл мода go и удалило ошибку для меня.

Убедитесь, что у вас есть версия go 1.11+.

Более старые версии не поддерживают модули, поэтому они не могут загрузить то, что необходимо, что приводит к Can't find package from $GOROOT and $GOPATH проблема.

попробуйте использовать эту команду в терминале:go mod tidy

Я использовал Go 1.20, и мой проект находится в ~/DSBSystems.
Ниже приведены шаги, которые я выполнил:

  • go env -w GO111MODULE=вкл.
  • компакт-диск ~/DSBSystems
  • go mod init DSBSystems
  • иди строй....

Добавление файла устранило проблему, поскольку я запускаю приложение с несколькимиgoпроекты. Это было необходимо, чтобы заставить его работать в VSCode. У GoLand не было этой проблемы, и он работал безgo.workфайл

перейдите в каталог main.go и запуститеgo get -u .Он загрузит все пакеты, необходимые для вашего кода, на основе файла go.mod.

Другие вопросы по тегам