Goプログラムを構築してインストールする方法
序章
これまでのGoシリーズのコーディング方法では、コマンド go run を使用して、ソースコードを自動的にコンパイルし、結果の実行可能ファイルを実行しました。 このコマンドはコマンドラインでコードをテストするのに役立ちますが、アプリケーションを配布またはデプロイするには、コードを共有可能なバイナリ実行可能ファイル、またはアプリケーションを実行できるマシンバイトコードを含む単一のファイルにビルドする必要があります。 これを行うには、Goツールチェーンを使用してプログラムをビルドおよびインストールします。
Goでは、ソースコードをバイナリ実行可能ファイルに変換するプロセスはbuildingと呼ばれます。 この実行可能ファイルがビルドされると、アプリケーションだけでなく、ターゲットプラットフォームでバイナリを実行するために必要なすべてのサポートコードも含まれます。 This means that a Go binary does not need system dependencies such as Go tooling to run on a new system. これらの実行可能ファイルを独自のシステムの実行可能ファイルパスに配置すると、システムのどこからでもプログラムを実行できるようになります。 This is the same thing as installing the program onto your system.
このチュートリアルでは、Goツールチェーンを使用してサンプルHello, World!
プログラムを実行、ビルド、およびインストールし、将来のアプリケーションを効果的に使用、配布、および展開できるようにします。
前提条件
この記事の例に従うには、次のものが必要です。
- Goのインストール方法とローカルプログラミング環境のセットアップに従ってセットアップされたGoワークスペース。
ステップ1—Goバイナリの設定と実行
まず、Goツールチェーンをデモンストレーションするための例として使用するアプリケーションを作成します。 これを行うには、従来の「Hello、World!」を使用します。 Goチュートリアルで最初のプログラムを作成する方法からのプログラム。
src
ディレクトリにgreeter
というディレクトリを作成します。
mkdir greeter
次に、新しく作成したディレクトリに移動し、選択したテキストエディタでmain.go
ファイルを作成します。
cd greeter nano main.go
ファイルが開いたら、次の内容を追加します。
src / greeter / 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 programs and libraries are built around the core concept of a module. A module contains information about the libraries that are used by your program and what versions of those libraries to use.
これがGoモジュールであることをGoに通知するには、go mod
コマンドを使用してGoモジュールを作成する必要があります。
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 will prompt you to run go mod tidy
in order to update this module’s requirements if they change in the future. Running it now will have no additional effect.
ステップ3—go build
を使用してGoバイナリを構築する
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
システム上に構築されている場合、実行可能ファイルは、Goがインストールされていなくても、他のlinux/386
システムと互換性があります。 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
宣言がある場合:
go.mod
module github.com/sammy/shark
その場合、生成された実行可能ファイルのデフォルト名はshark
になります。
特定の命名規則を必要とするより複雑なプログラムでは、これらのデフォルト値がバイナリの命名に常に最良の選択であるとは限りません。 このような場合は、-o
フラグを使用して出力をカスタマイズするのが最適です。
これをテストするには、前のセクションで作成した実行可能ファイルの名前をhello
に変更し、bin
というサブフォルダーに配置します。 このフォルダを作成する必要はありません。 Goは、ビルドプロセス中にそれを独自に実行します。
-o
フラグを指定して次のgo build
コマンドを実行します。
go build -o bin/hello
-o
フラグを使用すると、Goはコマンドの出力を選択した引数に一致させます。 この場合、結果はbin
という名前のサブフォルダーにhello
という名前の新しい実行可能ファイルになります。
新しい実行可能ファイルをテストするには、新しいディレクトリに移動して、バイナリを実行します。
cd bin ./hello
次の出力が表示されます。
OutputHello, World!
これで、プロジェクトのニーズに合わせて実行可能ファイルの名前をカスタマイズして、Goでバイナリを構築する方法の調査を完了することができます。 ただし、go build
を使用すると、現在のディレクトリからのバイナリの実行に制限されます。 In order to use newly built executables from anywhere on your system, you can install them using go install
.
ステップ5—go install
を使用したGoプログラムのインストール
この記事のこれまでのところ、.go
ソースファイルから実行可能バイナリを生成する方法について説明してきました。 これらの実行可能ファイルは、配布、展開、およびテストに役立ちますが、ソースディレクトリの外部からはまだ実行できません。 This would be a problem if you wanted to actively use your program in shell scripts or in other workflows. プログラムを使いやすくするために、システムにインストールして、どこからでもアクセスできます。
これが何を意味するのかを理解するには、go install
コマンドを使用してサンプルアプリケーションをインストールします。
go install
コマンドは、go build
とほぼ同じように動作しますが、実行可能ファイルを現在のディレクトリまたは-o
フラグで指定されたディレクトリに残す代わりに、実行可能ファイルを$GOPATH/bin
ディレクトリ。
$GOPATH
ディレクトリの場所を見つけるには、次のコマンドを実行します。
go env GOPATH
受け取る出力はさまざまですが、デフォルトは$HOME
ディレクトリ内のgo
ディレクトリです。
Output$HOME/go
go install
は、生成された実行可能ファイルをbin
という名前の$GOPATH
のサブディレクトリに配置するため、このディレクトリを$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シリーズのコーディング方法全体を確認してください。