Maison > développement back-end > Golang > Solution : le paquet foo n'est pas dans GOROOT

Solution : le paquet foo n'est pas dans GOROOT

WBOY
Libérer: 2024-02-09 10:48:07
avant
938 Les gens l'ont consulté

Solution : le paquet foo nest pas dans GOROOT

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.

Contenu de la question

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.

Papa6a68db90e55e62259c35b03c780c3

Maintenant, 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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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&#160;protected]/ssh/transport.go:8:2: package bufio is not in GOROOT (/home/me/src/bufio)
../../gobin/pkg/mod/github.com/mattn/[email&#160;protected]/noncolorable.go:4:2: package bytes is not in GOROOT (/home/me/src/bytes)
Copier après la connexion

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>
Copier après la connexion

Question

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.

Solution

  • Le titre de la question (et le texte original de la question) mentionne GOROOT

  • Petite histoire, votre installation Go semble être en panne... réparez-la :

  1. Téléchargez l'arborescence des sources Go adaptée à l'architecture de votre processeur (généralement amd64 pour une installation Linux typique) à partir de go.dev/dl
  2. cd /usr/local
  3. Extraire l'archive tar en tant que root
  4. cd ~/bin
  5. ln -s /usr/local/go/bin/go go
  6. ln -s /usr/local/go/bin/gofmt gofmt
  7. Mettez 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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal