suchen
HeimBackend-EntwicklungGolangNix: Go-Pakete im --pure-Modus verweisen immer noch auf den GOPATH des Hosts

Nix:--pure 模式下的 go 包仍然指向主机的 GOPATH

php-Editor Strawberry ist hier, um Ihnen das Problem des Go-Pakets im Nix-Pure-Modus vorzustellen, das auf den GOPATH des Hosts verweist. Unter Nix ist der --pure-Modus eine saubere Umgebung, die nicht auf den Umgebungsvariablen und Pfadeinstellungen des Hosts basiert. Einige Benutzer haben jedoch festgestellt, dass die Verwendung des go-Pakets im --pure-Modus immer noch auf den GOPATH des Hosts verweist. Dies liegt daran, dass das go-Paket im --pure-Modus nicht völlig unabhängig von der Hostumgebung ist. Es hängt dennoch bis zu einem gewissen Grad von der GOPATH-Einstellung des Hosts ab. Für diese Frage müssen wir besser verstehen, wie Nix funktioniert und wie die Umgebung richtig konfiguriert wird.

Frageninhalt

Ich versuche, das Go-Paket zu verwenden, um eine Nix-Shell auszuführen, um das Go-Programm zu testen. Um die Reproduzierbarkeit sicherzustellen, möchte ich jedoch nicht, dass „go in nix-shell“ auf hostbezogene Pfade oder Informationen verweist. Daher wurde mir empfohlen, im Befehl das Flag --pure zu verwenden.

Mein letzter Befehl sieht so aus:

$ nix-shell --pure -p go
Nachdem die

Shell gestartet ist, führe ich go env aus und sehe Folgendes:

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"

Ich möchte mein Go-Projekt auf reproduzierbare Weise installieren, ohne Host Inherited gopath und andere verwandte Umgebungsvariablen zu verwenden.

Gibt es eine Möglichkeit, die Abhängigkeiten des Hostsystems vollständig zu trennen, indem man das Nix-Go-Paket in der Shell installiert und dann das Go-Projekt testet?

Lösung

Auch wenn die Umgebungsvariablen GOPATH, GOENV, GOMODCACHE usw. sind. Überhaupt nicht festgelegt, GOPATHGOENVGOMODCACHE、&c。 完全未设置go env和相关工具合成相对于$HOME und verwandte Tools synthetisieren den Standardwert relativ zu $HOME.

Wenn Sie also regelmäßig testen möchten, dass Ihr Projekt keine versteckten Abhängigkeiten von Ihrem Home-Verzeichnis hat, sollten Sie seinen Build in einen Nix-Fork einschließen. Vorausgesetzt, Sie befinden sich auf einer Plattform, auf der Nix Sandboxing unterstützt und diese Funktion aktiviert ist Erstellen Sie den Build, um ihn in der Sandbox abzuschließen, ohne Zugriff auf Ihr Home-Verzeichnis.

Siehe gomod2nix und den allgemeineren Go-Eintrag auf nixos.wiki für Anleitungen zum Erstellen von Forks zum Umschließen von Programm-Builds.

Bitte beachten Sie auch nix-shell --pure 不会创建在任何意义上都是纯粹的 shell:仍然依赖于来自本地渠道的 nixpkgs。如果你想控制它,你需要一个 shell.nixflake.nix, dass Sie bestimmte Nixpkgs-Versionen anpinnen müssen.

Das obige ist der detaillierte Inhalt vonNix: Go-Pakete im --pure-Modus verweisen immer noch auf den GOPATH des Hosts. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:stackoverflow. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Go vs. andere Sprachen: Eine vergleichende AnalyseGo vs. andere Sprachen: Eine vergleichende AnalyseApr 28, 2025 am 12:17 AM

GoisastrongchoiceForProjectSeNeedingImplication, Leistung und Konkurrenz, ButitmaylackinadvancedFeatures undcosystemmaturity.1) Go'SSYNTAXISMPEANDEALEDELTOLEARN, FEHTTOFEWERBUGSANDMOREMINTAINABLECODE, obwohl es sich

Vergleich von Init -Funktionen in statischen Initialisierern in anderen SprachenVergleich von Init -Funktionen in statischen Initialisierern in anderen SprachenApr 28, 2025 am 12:16 AM

Go'Sinitfunctionandjava'SstaticInitializersBothServetosetupenvironmentBeforethemaNfunction, Buttheydifferinexexcution undControl

Häufige Anwendungsfälle für die Init -Funktion in GOHäufige Anwendungsfälle für die Init -Funktion in GOApr 28, 2025 am 12:13 AM

ThecommonusecasesFortheinitfunctioningoare: 1) LadekonfigurationsfiguresbeforethemaProgramstarts, 2) Initialisierungsglobalvariablen und 3) RunningPre-ChecksorvalidationsBeforTheProgramProcececececeers.

Kanäle in Go: Mastering Inter-Goroutine CommunicationKanäle in Go: Mastering Inter-Goroutine CommunicationApr 28, 2025 am 12:04 AM

ChannelsarecrucialingoforenablingsAfeAnDefficienceCommunicationBetweengoroutines.TheyfacilitateSynchronizationAndManageGoroutinElifecycle, EssentialforcurrentProgramming.ChannelsallowsendingandReceive -Values, ActaStarnalsforsynchronisierungen und Subors

Wickeln Fehler in Go: Hinzufügen von Kontext zu Fehlerketten HinzufügenWickeln Fehler in Go: Hinzufügen von Kontext zu Fehlerketten HinzufügenApr 28, 2025 am 12:02 AM

In Go können Fehler verpackt und ein Kontext über Fehler hinzugefügt werden. 1) Mit der neuen Funktion des Fehlerpakets können Sie während der Fehlerausbreitung Kontextinformationen hinzufügen. 2) Helfen Sie dabei, das Problem zu lokalisieren, indem Sie Fehler über FMT.Errorf und %W einwickeln. 3) Benutzerdefinierte Fehlertypen können mehr semantische Fehler erzeugen und die ausdrucksstarke Fähigkeit der Fehlerbehandlung verbessern.

Sicherheitsüberlegungen bei der Entwicklung mit GoSicherheitsüberlegungen bei der Entwicklung mit GoApr 27, 2025 am 12:18 AM

GooffersrobustFeaturesForsecurecoding, butdeveloperMustimplementsCurityBestPracticeSeffective.1) UseGo'ScryptopackageForScedatahandling.2) ManageConcurrencywithsynchronizationPrimitivestopreventraceconcitions.3) Sanitendien.3) HANNISITEPERCEEPERCEEPERCEEPERSCEEDEEXTERSEXTERSUCHE

Verständnis der Fehleroberfläche von GoVerständnis der Fehleroberfläche von GoApr 27, 2025 am 12:16 AM

Die Fehlerschnittstelle von GO ist als TypeErrorInterface {error () String} definiert, sodass jeder Typ, der die Fehler (ERROR () -Methode implementiert, als Fehler angesehen werden kann. Die Verwendung für die Verwendung sind wie folgt: 1. Überprüfen Sie im Grunde genommen Fehler und Protokollfehler, wie z. 2. Erstellen Sie einen benutzerdefinierten Fehlertyp, um weitere Informationen bereitzustellen, z. 3. Verwenden Sie Fehlerverpackungen (seit Go1.13), um den Kontext hinzuzufügen, ohne die ursprüngliche Fehlermeldung zu verlieren.

Fehlerbehandlung in gleichzeitigen GO -ProgrammenFehlerbehandlung in gleichzeitigen GO -ProgrammenApr 27, 2025 am 12:13 AM

TOEFFEKTIVE HANDLEERSINCONCURENTGOPROGRAMMEN, UsechannelstocommunicateErrors, ImplementErrorWatchers, Considertimeouts, UseBiftedChannels und ProvideClearErrormessages.1) Usechannelstopassirrorsfromgoroutinestothänenfunktion.2) ImplementanerErrorWesser

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version