>백엔드 개발 >Golang >Nix: --pure 모드의 go 패키지는 여전히 호스트의 GOPATH를 가리킵니다.

Nix: --pure 모드의 go 패키지는 여전히 호스트의 GOPATH를 가리킵니다.

WBOY
WBOY앞으로
2024-02-15 09:27:081123검색

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

php 편집기 Strawberry는 호스트의 GOPATH를 가리키는 Nix 순수 모드의 go 패키지 문제를 소개하기 위해 왔습니다. Nix에서 --pure 모드는 호스트의 환경 변수 및 경로 설정에 의존하지 않는 깨끗한 환경입니다. 그러나 일부 사용자는 --pure 모드에서 go 패키지를 사용하면 여전히 호스트의 GOPATH를 가리킨다는 사실을 발견했습니다. 이는 --pure 모드의 go 패키지가 호스트 환경과 완전히 독립적이지 않기 때문입니다. 이는 여전히 호스트의 GOPATH 설정에 어느 정도 의존합니다. 이 질문에 대해서는 Nix의 작동 방식과 환경을 올바르게 구성하는 방법을 더 자세히 이해해야 합니다.

질문 내용

go 프로그램을 테스트하기 위해 nix 쉘을 실행하기 위해 go 패키지를 사용하려고 합니다. 그러나 재현성을 보장하기 위해 nix-shell에서 호스트 관련 경로나 정보를 가리키고 싶지 않습니다. 따라서 명령에 --pure 플래그를 사용하는 것이 좋습니다.

마지막 명령은 다음과 같습니다:

으아악

쉘이 시작된 후 go env를 실행하면 다음이 표시됩니다.

으아악

호스트 상속gopath 및 기타 관련 환경 변수를 사용하지 않고 재현 가능한 방식으로 Go 프로젝트를 설치하고 싶습니다.

쉘에 nix go 패키지를 설치한 후 go 프로젝트를 테스트하여 호스트 시스템 종속성을 완전히 분리할 수 있는 방법이 있나요?

해결책

환경 변수가 GOPATH, GOENV, GOMODCACHE, &c인 경우에도 마찬가지입니다. 전혀 설정되지 않음, GOPATHGOENVGOMODCACHE、&c。 完全未设置go env和相关工具合成相对于$HOME 및 관련 도구는 $HOME을 기준으로 기본값을 합성합니다.

따라서 프로젝트에 홈 디렉터리에 숨겨진 종속성이 없는지 정기적으로 테스트하려면 Nix가 샌드박싱을 지원하고 이 기능이 활성화된 플랫폼에 있다고 가정하고 해당 빌드를 Nix 포크로 래핑해야 합니다. 홈 디렉터리에 액세스하지 않고도 샌드박스에서 빌드를 완료할 수 있습니다.

프로그램 빌드를 래핑하기 위한 포크 빌드에 대한 지침은 gomod2nixnixos.wiki의 보다 일반적인 Go 항목을 참조하세요.

또한 특정 nixpkgs 버전을 고정하려면 nix-shell --pure 不会创建在任何意义上都是纯粹的 shell:仍然依赖于来自本地渠道的 nixpkgs。如果你想控制它,你需要一个 shell.nixflake.nix 참고하세요.

위 내용은 Nix: --pure 모드의 go 패키지는 여전히 호스트의 GOPATH를 가리킵니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제