Maison >développement back-end >Golang >Nix : les packages go en mode --pure pointent toujours vers le GOPATH de l'hôte
l'éditeur php Strawberry est là pour vous présenter le problème du package go dans Nix --mode pur pointant vers le GOPATH de l'hôte. Dans Nix, le mode --pure est un environnement propre qui ne repose pas sur les variables d'environnement et les paramètres de chemin de l'hôte. Cependant, certains utilisateurs ont constaté que l'utilisation du package go en mode --pure pointe toujours vers le GOPATH de l'hôte. En effet, le package go en mode --pure n'est pas complètement indépendant de l'environnement hôte. Il dépendra toujours dans une certaine mesure du paramètre GOPATH de l'hôte. Pour cette question, nous devons mieux comprendre comment fonctionne Nix et comment configurer correctement l'environnement.
J'essaie d'utiliser le package go pour exécuter un shell nix afin de tester le programme go. Cependant, pour garantir la reproductibilité, je ne souhaite pas accéder à nix-shell pour pointer vers des chemins ou des informations liés à l'hôte. Par conséquent, on m'a conseillé d'utiliser le drapeau --pure
dans la commande.
Ma commande finale ressemble à ceci :
$ nix-shell --pure -p goAprès le démarrage du
shell, je cours go env
et vois ce qui suit :
GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/home/HOSTUSERNAME/.cache/go-build" GOENV="/home/HOSTUSERNAME/.config/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/home/HOSTUSERNAME/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/HOSTUSERNAME/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/nix/store/a7875alzpnr46z6mv4ssymfdwmvr6xbq-go-1.19.4/share/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/nix/store/a7875alzpnr46z6mv4ssymfdwmvr6xbq-go-1.19.4/share/go/pkg/tool/linux_amd64" GOVCS="" GOVERSION="go1.19.4" GCCGO="gccgo" GOAMD64="v1" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/dev/null" GOWORK="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/run/user/1000/go-build3633664660=/tmp/go-build -gno-record-gcc-switches"
Je souhaite installer mon projet go de manière reproductible sans utiliser l'hôte hérité gopath
et d'autres variables d'environnement associées.
Existe-t-il un moyen de séparer complètement les dépendances du système hôte en installant le package nix go dans le shell, puis en testant le projet go ?
Même si les variables d'environnement sont GOPATH
, GOENV
, GOMODCACHE
, &c. Pas défini du tout, GOPATH
、GOENV
、GOMODCACHE
、&c。 完全未设置,go env
和相关工具合成相对于$HOME
et les outils associés synthétisent la valeur par défaut relative à $HOME
.
Donc, si vous souhaitez vérifier régulièrement que votre projet n'a pas de dépendances cachées sur votre répertoire personnel, vous devez envelopper sa construction dans un fork Nix ; en supposant que vous êtes sur une plate-forme sur laquelle Nix prend en charge le sandboxing et que cette fonctionnalité est activée, cela provoquera le build pour terminer dans le bac à sable sans accès à votre répertoire personnel.
Voir gomod2nix et l'entrée Go plus générale sur nixos.wiki pour obtenir des conseils sur la création de forks pour envelopper les builds de programmes.
Veuillez également noter nix-shell --pure
不会创建在任何意义上都是纯粹的 shell:仍然依赖于来自本地渠道的 nixpkgs。如果你想控制它,你需要一个 shell.nix
或 flake.nix
pour épingler des versions nixpkgs spécifiques.
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!