l'éditeur php Baicao vous apporte une solution au problème du "paquet foo n'est pas dans GOROOT". Lorsque nous utilisons la programmation en langage Go, nous rencontrons parfois de telles invites d'erreur. Cette erreur signifie généralement que nous essayons d'importer un package, mais que le package ne se trouve pas dans le répertoire d'installation du langage Go (GOROOT). Dans cet article, nous vous présenterons en détail comment résoudre ce problème afin que votre code Go puisse importer en douceur les packages requis.
J'essaie de compiler mon projet Go, mais la manière de corriger l'erreur de compilation n'est pas évidente. Un exemple simplifié suit.
Papa6a68db90e55e62259c35b03c780c3Maintenant, j'utilise make dep
(与 Makefile
,如下)构建 go.mod
并尝试获取所有依赖项,但这并没有获取它们,因为我一直看到 package foo is not in GOROOT
à tort.
<code># filename: ~/myprojects/automate_things/Makefile GOOS=linux GO_SOURCE_FILE=automate_things.go GO_BINARY_FILE=automate_things GO_BIN_DIR=bin/ .SILENT: build .DEFAULT_GOAL := build build: -make fmt make dep go build $(GO_SOURCE_FILE) if [ "$(PLATFORM)" = "Linux" ]; then \ GOARCH=amd64 GOOS=linux go build -ldflags "-s -w" -o ./$(GO_BINARY_FILE) $(GO_SOURCE_FILE); \ elif [ "$(PLATFORM)" = "Darwin" ]; then \ GOARCH=amd64 GOOS=darwin go build -ldflags "-s -w" -o ./$(GO_BINARY_FILE) $(GO_SOURCE_FILE); \ fi .PHONY: build fmt: go fmt $(GO_SOURCE_FILE) .PHONY: fmt dep: -rm go.mod -rm go.sum go mod init automate_things go mod tidy go mod download .PHONY: dep </code>
C'est le mien~/.bashrc
, il exporte plusieurs variables d'environnement go pertinentes.
<code># filename: ~/.bashrc # Build the default GOROOT (re-run the command as root) mkdir -p /usr/local/go export GOPROXY=https://proxy.golang.org mkdir -p ~/gobin/bin export GOPATH=~/gobin #export GO111MODULE=auto export PATH=$PATH:$GOPATH/bin </code>
Ceci est généré par go.mod
,是我的Makefile
(make dep
)
<code>// go.mod module automate_things go 1.20 require ( github.com/gleich/logoru v0.0.0-20230101033757-d86cd895c7a1 github.com/melbahja/goph v1.4.0 ) require ( github.com/fatih/color v1.10.0 // indirect github.com/kr/fs v0.1.0 // indirect github.com/mattn/go-colorable v0.1.8 // indirect github.com/mattn/go-isatty v0.0.12 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pkg/sftp v1.13.5 // indirect golang.org/x/crypto v0.6.0 // indirect golang.org/x/sys v0.5.0 // indirect ) </code>
C'est ce que j'ai vu quand make dep
$ make make[1]: Entering directory '/home/me/myprojects/automate_things' go fmt automate_things.go make[1]: Leaving directory '/home/me/myprojects/automate_things' make[1]: Entering directory '/home/me/myprojects/automate_things' rm go.mod rm go.sum go mod init automate_things go: creating new go.mod: module automate_things go: to add module requirements and sums: go mod tidy go mod tidy go: finding module for package github.com/melbahja/goph go: finding module for package github.com/gleich/logoru go: found github.com/gleich/logoru in github.com/gleich/logoru v0.0.0-20230101033757-d86cd895c7a1 go: found github.com/melbahja/goph in github.com/melbahja/goph v1.4.0 go mod download make[1]: Leaving directory '/home/me/myprojects/automate_things' ../../gobin/pkg/mod/golang.org/x/[email protected]/ssh/transport.go:8:2: package bufio is not in GOROOT (/home/me/src/bufio) ../../gobin/pkg/mod/github.com/mattn/[email protected]/noncolorable.go:4:2: package bytes is not in GOROOT (/home/me/src/bytes)
Essayons donc de télécharger directement en utilisant go get
et sudo pour résoudre tout problème d'autorisation potentiel...
<code>$ sudo /home/me/bin/go get github.com/melbahja/goph go: downloading github.com/melbahja/goph v1.4.0 go: downloading github.com/pkg/errors v0.9.1 go: downloading github.com/pkg/sftp v1.13.5 go: downloading golang.org/x/crypto v0.6.0 go: downloading github.com/kr/fs v0.1.0 go: downloading golang.org/x/sys v0.5.0 github.com/melbahja/goph imports context: package context is not in GOROOT (/usr/local/go/src/context) github.com/melbahja/goph imports errors: package errors is not in GOROOT (/usr/local/go/src/errors) github.com/melbahja/goph imports </code>
Mon go
二进制文件位于 ~/bin/go
est là.
Quel est le moyen le plus efficace d'obtenir/spécifier des dépendances dans mon Makefile
(sans lister des sous-dépendances interminables) et de compiler ce projet ? Je souhaite résoudre tous les problèmes de compilation répertoriés ci-dessus.
RTFM n'est pas la réponse. RTFM fournit des liens directs vers des documents valides.
Le titre de la question (et le texte original de la question) mentionne GOROOT
GOROOT
. Petite histoire, votre installation Go semble être en panne... réparez-la :
cd /usr/local
cd ~/bin
ln -s /usr/local/go/bin/go go
ln -s /usr/local/go/bin/gofmt gofmt
cd
dans le répertoire de votre projet et construisez comme vous l'avez configuré cd
放入您的项目目录中,并按照您设置 Makefile
. Cela devrait fonctionner maintenant. Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!