Goプログラムを構築してインストールする方法
序章
これまでのGoシリーズのコーディング方法では、コマンド go run を使用して、ソースコードを自動的にコンパイルし、結果の実行可能ファイルを実行しました。 このコマンドはコマンドラインでコードをテストするのに役立ちますが、アプリケーションを配布またはデプロイするには、コードを共有可能なバイナリ実行可能ファイル、またはアプリケーションを実行できるマシンバイトコードを含む単一のファイルにビルドする必要があります。 これを行うには、Goツールチェーンを使用してプログラムをビルドおよびインストールします。
Goでは、ソースコードをバイナリ実行可能ファイルに変換するプロセスはbuildingと呼ばれます。 この実行可能ファイルがビルドされると、アプリケーションだけでなく、ターゲットプラットフォームでバイナリを実行するために必要なすべてのサポートコードも含まれます。 つまり、Goバイナリは、新しいシステムで実行するためにGoツールなどのシステム依存関係を必要としません。 これらの実行可能ファイルを独自のシステムの実行可能ファイルパスに配置すると、システムのどこからでもプログラムを実行できるようになります。 これは、システムにプログラムをインストールするのと同じことです。
このチュートリアルでは、Goツールチェーンを使用してサンプルを実行、ビルド、およびインストールします Hello, World!
プログラム。将来のアプリケーションを効果的に使用、配布、および展開できます。
前提条件
この記事の例に従うには、次のものが必要です。
- Goのインストール方法とローカルプログラミング環境のセットアップに従ってセットアップされたGoワークスペース。
ステップ1—Goバイナリの設定と実行
まず、Goツールチェーンをデモンストレーションするための例として使用するアプリケーションを作成します。 これを行うには、従来の「Hello、World!」を使用します。 Goチュートリアルで最初のプログラムを作成する方法からのプログラム。
と呼ばれるディレクトリを作成します greeter
あなたの中で src
ディレクトリ:
- mkdir greeter
次に、新しく作成したディレクトリに移動して、 main.go
選択したテキストエディタのファイル:
- cd greeter
- nano main.go
ファイルが開いたら、次の内容を追加します。
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
実行すると、このプログラムはフレーズを出力します Hello, World!
コンソールに移動すると、プログラムは正常に終了します。
ファイルを保存して終了します。
プログラムをテストするには、 go run
以前のチュートリアルで行ったように、コマンド:
- go run main.go
次の出力が表示されます。
OutputHello, World!
前に述べたように、 go run
コマンドは、ソースファイルを実行可能バイナリにビルドしてから、コンパイルされたプログラムを実行しました。 ただし、このチュートリアルは、自由に共有および配布できるようにバイナリを構築することを目的としています。 これを行うには、 go build
次のステップでコマンドを実行します。
ステップ2—Goバイナリを構築するためのGoモジュールの作成
Goプログラムとライブラリは、モジュールのコアコンセプトに基づいて構築されています。 モジュールには、プログラムで使用されるライブラリと、それらのライブラリのどのバージョンを使用するかに関する情報が含まれています。
これがGoモジュールであることをGoに伝えるには、Goモジュールを使用して作成する必要があります。 go mod
指図:
- go mod init greeter
これによりファイルが作成されます go.mod
、モジュールの名前と、モジュールのビルドに使用されたGoのバージョンが含まれます。
Outputgo: creating new go.mod: module greeter
go: to add module requirements and sums:
go mod tidy
Goは実行するように促します go mod tidy
将来変更された場合にこのモジュールの要件を更新するため。 今すぐ実行しても、追加の効果はありません。
ステップ3—Goバイナリを構築する go build
使用する go build
、サンプルのGoアプリケーションの実行可能バイナリを生成して、必要な場所にプログラムを配布およびデプロイできます。
これを試してみてください main.go
. あなたの中で greeter
ディレクトリで、次のコマンドを実行します。
- go build
このコマンドに引数を指定しない場合は、 go build
自動的にコンパイルされます main.go
現在のディレクトリにあるプログラム。 コマンドにはすべての *.go
ディレクトリ内のファイル。 また、システムに .go
ソースファイル、またはGoインストールですら。
この場合、あなたはあなたを構築しました greeter
現在のディレクトリに追加された実行可能ファイルにアプリケーションを追加します。 を実行してこれを確認してください ls
指図:
- ls
macOSまたはLinuxを実行している場合は、プログラムをビルドしたディレクトリにちなんで名付けられた新しい実行可能ファイルが見つかります。
Outputgreeter main.go go.mod
注: Windowsでは、実行可能ファイルは次のようになります。 greeter.exe
.
デフォルトでは go build
現在のプラットフォームとアーキテクチャの実行可能ファイルを生成します。 たとえば、 linux/386
システム、実行可能ファイルは他のものと互換性があります linux/386
Goがインストールされていない場合でもシステム。 Goは、他のプラットフォームおよびアーキテクチャー向けの構築をサポートしています。詳細については、さまざまなオペレーティングシステムおよびアーキテクチャー向けのGoアプリケーションの構築の記事を参照してください。
これで実行可能ファイルが作成されたので、実行可能ファイルを実行して、バイナリが正しく作成されていることを確認します。 macOSまたはLinuxでは、次のコマンドを実行します。
- ./greeter
Windowsでは、次を実行します。
- greeter.exe
バイナリの出力は、プログラムを実行したときの出力と一致します。 go run
:
OutputHello, World!
これで、プログラムだけでなく、そのバイナリを実行するために必要なすべてのシステムコードを含む単一の実行可能バイナリが作成されました。 これで、ファイルが常に同じプログラムを実行することを知って、このプログラムを新しいシステムに配布したり、サーバーに展開したりできます。
次のセクションでは、このチュートリアルで、バイナリの名前とその変更方法について説明します。これにより、プログラムのビルドプロセスをより適切に制御できるようになります。
ステップ4—バイナリ名を変更する
実行可能ファイルを生成する方法がわかったので、次のステップは、Goがバイナリの名前を選択する方法を特定し、プロジェクトに合わせてこの名前をカスタマイズすることです。
あなたが走るとき go build
、デフォルトでは、Goが生成された実行可能ファイルの名前を自動的に決定します。 これは、前に作成したモジュールを使用して行います。 いつ go mod init greeter
コマンドが実行され、「greeter」という名前のモジュールが作成されました。これが、生成されたバイナリの名前が付けられている理由です。 greeter
順番に。
モジュールメソッドを詳しく見てみましょう。 あなたが持っていた場合 go.mod
プロジェクト内のファイル module
次のような宣言:
module github.com/sammy/shark
その場合、生成された実行可能ファイルのデフォルト名は次のようになります。 shark
.
特定の命名規則を必要とするより複雑なプログラムでは、これらのデフォルト値がバイナリの命名に常に最良の選択であるとは限りません。 このような場合は、次のコマンドを使用して出力をカスタマイズするのが最適です。 -o
国旗。
これをテストするには、前のセクションで作成した実行可能ファイルの名前を次のように変更します。 hello
と呼ばれるサブフォルダーに配置します bin
. このフォルダを作成する必要はありません。 Goは、ビルドプロセス中にそれを独自に実行します。
次を実行します go build
とのコマンド -o
国旗:
- go build -o bin/hello
The -o
フラグを設定すると、Goはコマンドの出力を選択した引数に一致させます。 この場合、結果はという名前の新しい実行可能ファイルになります hello
名前の付いたサブフォルダ内 bin
.
新しい実行可能ファイルをテストするには、新しいディレクトリに移動して、バイナリを実行します。
- cd bin
- ./hello
次の出力が表示されます。
OutputHello, World!
これで、プロジェクトのニーズに合わせて実行可能ファイルの名前をカスタマイズして、Goでバイナリを構築する方法の調査を完了することができます。 しかし、 go build
、現在のディレクトリからのバイナリの実行に制限されています。 システムのどこからでも新しく構築された実行可能ファイルを使用するために、を使用してそれらをインストールできます go install
.
ステップ5—Goプログラムをインストールする go install
この記事のこれまでのところ、実行可能バイナリを生成する方法について説明してきました。 .go
ソースファイル。 これらの実行可能ファイルは、配布、展開、およびテストに役立ちますが、ソースディレクトリの外部からはまだ実行できません。 これは、シェルスクリプトや他のワークフローでプログラムを積極的に使用したい場合に問題になります。 プログラムを使いやすくするために、システムにインストールして、どこからでもアクセスできます。
これが何を意味するのかを理解するには、 go install
サンプルアプリケーションをインストールするコマンド。
The go install
コマンドはほぼ同じように動作します go build
、ただし、実行可能ファイルを現在のディレクトリ、またはで指定されたディレクトリに残す代わりに -o
フラグ、実行可能ファイルをに配置します $GOPATH/bin
ディレクトリ。
あなたの場所を見つけるために $GOPATH
ディレクトリが見つかったら、次のコマンドを実行します。
- go env GOPATH
受信する出力は異なりますが、デフォルトは go
あなたの内部のディレクトリ $HOME
ディレクトリ:
Output$HOME/go
以来 go install
生成された実行可能ファイルをのサブディレクトリに配置します $GOPATH
名前付き bin
、このディレクトリはに追加する必要があります $PATH
環境変数。 これについては、前提条件の記事Goのインストール方法とローカルプログラミング環境のセットアップのGoワークスペースの作成ステップで説明されています。
とともに $GOPATH/bin
ディレクトリを設定し、に戻ります greeter
ディレクトリ:
- cd ..
次に、installコマンドを実行します。
- go install
これにより、バイナリがビルドされ、に配置されます $GOPATH/bin
. これをテストするには、次を実行します。
- ls $GOPATH/bin
これはの内容を一覧表示します $GOPATH/bin
:
Outputgreeter
注: go install
コマンドはをサポートしませんは -o
フラグを設定するため、実行可能ファイルに名前を付けるために前述のデフォルト名を使用します。
バイナリをインストールした状態で、プログラムがソースディレクトリの外部から実行されるかどうかをテストします。 ホームディレクトリに戻ります。
- cd $HOME
プログラムを実行するには、以下を使用します。
- greeter
これにより、次のようになります。
OutputHello, World!
これで、作成したプログラムをシステムにインストールして、必要なときにいつでもどこからでも使用できるようになります。
結論
このチュートリアルでは、Goツールチェーンを使用してソースコードから実行可能バイナリを簡単に構築する方法を示しました。 これらのバイナリは、Goツールや環境がないシステムでも、他のシステムで実行するために配布できます。 あなたも使用しました go install
システムの実行可能ファイルとしてプログラムを自動的にビルドしてインストールします $PATH
. と go build
と go install
、アプリケーションを自由に共有して使用できるようになりました。
これで、の基本を理解できました go build
、ビルドタグを使用したGoバイナリのカスタマイズチュートリアルでモジュラーソースコードを作成する方法、またはさまざまなオペレーティングシステムとアーキテクチャ用のGoアプリケーションのビルドを使用してさまざまなプラットフォーム用にビルドする方法を調べることができます。 Goプログラミング言語全般について詳しく知りたい場合は、Goシリーズのコーディング方法全体を確認してください。