ホームページ  >  記事  >  バックエンド開発  >  Nix: --pure モードの go パッケージは依然としてホストの GOPATH を指します

Nix: --pure モードの go パッケージは依然としてホストの GOPATH を指します

WBOY
WBOY転載
2024-02-15 09:27:081067ブラウズ

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

php editor Strawberry は、Nix --pure モードの go パッケージがホストの GOPATH を指している問題を紹介します。 Nix では、--pure モードは、ホストの環境変数やパス設定に依存しないクリーンな環境です。ただし、一部のユーザーは、 --pure モードで go パッケージを使用してもホストの GOPATH を指していることに気づきました。 --pure モードの go パッケージはホスト環境から完全に独立しているわけではなく、ホストの GOPATH 設定にある程度依存するためです。この質問に対しては、Nix がどのように機能するのか、そして環境を正しく構成する方法をさらに理解する必要があります。

質問内容

go パッケージを使用して nix シェルを実行し、go プログラムをテストしようとしています。ただし、再現性を確保するために、nix-shell でホスト関連のパスや情報を指すことは望ましくありません。したがって、コマンドで --pure フラグを使用するようにアドバイスされました。

最終的なコマンドは次のようになります:

リーリー

シェルが起動した後、go envを実行すると、次の内容が表示されます:

リーリー

ホストから継承された gopath およびその他の関連する環境変数を使用せずに、再現可能な方法で go プロジェクトをインストールしたいと考えています。

nix go パッケージをシェルにインストールして go プロジェクトをテストすることで、ホスト システムの依存関係を完全に分離する方法はありますか?

解決策

環境変数が GOPATHGOENVGOMODCACHE などである場合でも。 まったく設定されていません go env および関連ツールは、$HOME を基準としたデフォルト値を合成します。

したがって、プロジェクトにホーム ディレクトリに対する隠れた依存関係がないことを定期的にテストしたい場合は、そのビルドを Nix フォークでラップする必要があります。Nix がサンドボックスをサポートし、この機能が有効になっているプラ​​ットフォームを使用していると仮定すると、次のようになります。これにより、ホーム ディレクトリにアクセスせずにサンドボックス内でビルドが完了します。

プログラム ビルドをラップするフォークの構築に関するガイダンスについては、gomod2nix および nixos.wiki のより一般的な Go エントリを参照してください。

また、nix-shell --pure は、いかなる意味でも純粋なシェルを作成しないことに注意してください。依然としてローカル チャネルからの nixpkg に依存します。これを制御したい場合は、特定の nixpkgs バージョンを固定するために shell.nix または flake.nix が必要です。

以上がNix: --pure モードの go パッケージは依然としてホストの GOPATH を指しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。