go
ツールでしばらく遊んだ後、それは次のようになりますgo get
:
- (オプションで)ダウンロード、
- コンパイル、
- とインストール
go install
単純にソフトウェアの一部
- コンパイルします
- とインストール
それ。この場合、go install
コマンドがgo get
優先されるのに、なぜコマンドが存在するのですか?
回答:
go install
ローカルで作業する場合のワークフローの一部です。ライブラリを使用したいが、何らかの理由で変更が必要だとします。あなたはするでしょう:
go get -d library
、それをダウンロードするだけです。go install library
ローカルバージョンをインストールします。私の知る限り、ダウンロードしgo get
てはならないことを示すフラグがないため、go install
ここで置き換えることはできません。
新しいパッケージを最初から開発する場合も、同じワークフローが使用されます。
go install
あなたの目標をより明確にしますが、私は両方が同じことを達成すると思います。として宣言されたものを含むいくつかのパッケージでテストしましたがmain
、それらは同等のようでした。ドキュメントには、このコマンドが非常に不足しています。
go get
代わりに使用することもできます(追加しない限り)。ライブラリを最初から作成するときにも使用できます。完全に冗長なようです。go install
go get
-u
go get
go install
go get
この順序で2つの主要なことを行います。
$GOPATH/src/<import-path>
インポートパスで指定されたパッケージ(ソースコード)とその依存関係をダウンロードして保存し、
を実行します go install
-d
フラグは、( go get -d
)に指示go get
パッケージをダウンロードした後に停止します。つまり、実行しgo get
ないように指示しますgo install
違い:
go get
//パッケージをダウンロードする必要があるかどうかを確認し、必要に応じてダウンロードしてからコンパイルします
go install
//パッケージのダウンロードの部分をスキップし、コンパイルするだけです(パッケージが不足している場合はエラーがスローされます)
GOPATH
環境変数について
GOPATH
環境変数は、移動ツールで使用されます。get
、build
およびinstall
パッケージ化できるように設定する必要があり、ワークスペースの場所を指定します。Goコードを開発するときに設定する必要がある唯一の環境変数である可能性があります。
繰り返しGOPATH
ますが、はGoのインストールではなく、ワークスペースを指す必要があります。
たとえば、Windowsでは、ワークスペースがにあると判断した場合は、値を次のようc:\gowork\
に設定する必要があります。GOPATH
c:\gowork
ソースコードは次の場所にある必要がc:\gowork\src\<some project folder>\
あります。go get
コマンドプロンプトでc:\gowork\src\<some project folder>\
実行すると、c:\gowork\bin\
とc:\gowork\pkg\
が作成されます。
go install
モジュール対応のセットアップでパッケージをダウンロードします。
go 1.16(Q1 2021)を使用すると、その違いがより明確になり、問題40276の一部としてCL266360で実装されることに注意してください。
go install
バージョンサフィックスが付いた引数を受け入れるようになりました(たとえばgo install example.com/cmd@v1.0.0
)。
これが原因go install
するモジュール対応モードでパッケージをビルドしてインストールし、無視してgo.mod
ファイル1が存在する場合、現在のディレクトリにまたは任意の親ディレクトリを。
これは、メインモジュールの依存関係に影響を与えずに実行可能ファイルをインストールする場合に役立ちます。
go install
(上記のように)バージョンサフィックスの有無にかかわらず、モジュールモードでパッケージをビルドおよびインストールするための推奨される方法になりました。
go get
-d
パッケージをビルドせずに現在のモジュールの依存関係を調整するには、フラグとともに使用する必要があります。パッケージのビルドとインストールにgo get
を使用することは非推奨です。
では、今後のリリースで、-d
フラグは常に有効になります。
go get ./path/to/local_package
でき、使用した場合と同じように動作しgo install ./path/to/local_package
ますよね?この場合、ダウンロードプロセスがないためです。