


Nix: Go-Pakete im --pure-Modus verweisen immer noch auf den GOPATH des Hosts
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 goNachdem 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, GOPATH
、GOENV
、GOMODCACHE
、&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.nix
或 flake.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!

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

Go'Sinitfunctionandjava'SstaticInitializersBothServetosetupenvironmentBeforethemaNfunction, Buttheydifferinexexcution undControl

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

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

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.

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

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.

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


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version
