序章

これまでのGoシリーズのコーディング方法では、コマンド go run を使用して、ソースコードを自動的にコンパイルし、結果の実行可能ファイルを実行しました。 このコマンドはコマンドラインでコードをテストするのに役立ちますが、アプリケーションを配布またはデプロイするには、コードを共有可能なバイナリ実行可能ファイル、またはアプリケーションを実行できるマシンバイトコードを含む単一のファイルにビルドする必要があります。 これを行うには、Goツールチェーンを使用してプログラムをビルドおよびインストールします。

Goでは、ソースコードをバイナリ実行可能ファイルに変換するプロセスはbuildingと呼ばれます。 この実行可能ファイルがビルドされると、アプリケーションだけでなく、ターゲットプラットフォームでバイナリを実行するために必要なすべてのサポートコードも含まれます。 つまり、Goバイナリは、新しいシステムで実行するためにGoツールなどのシステム依存関係を必要としません。 これらの実行可能ファイルを独自のシステムの実行可能ファイルパスに配置すると、システムのどこからでもプログラムを実行できるようになります。 これは、システムにプログラムをインストールするのと同じことです。

このチュートリアルでは、Goツールチェーンを使用してサンプルを実行、ビルド、およびインストールします Hello, World! プログラム。将来のアプリケーションを効果的に使用、配布、および展開できます。

前提条件

この記事の例に従うには、次のものが必要です。

ステップ1—Goバイナリの設定と実行

まず、Goツールチェーンをデモンストレーションするための例として使用するアプリケーションを作成します。 これを行うには、従来の「Hello、World!」を使用します。 Goチュートリアルで最初のプログラムを作成する方法からのプログラム。

と呼ばれるディレクトリを作成します greeter あなたの中で src ディレクトリ:

  1. mkdir greeter

次に、新しく作成したディレクトリに移動して、 main.go 選択したテキストエディタのファイル:

  1. cd greeter
  2. nano main.go

ファイルが開いたら、次の内容を追加します。

src / greeter / main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

実行すると、このプログラムはフレーズを出力します Hello, World! コンソールに移動すると、プログラムは正常に終了します。

ファイルを保存して終了します。

プログラムをテストするには、 go run 以前のチュートリアルで行ったように、コマンド:

  1. go run main.go

次の出力が表示されます。

Output
Hello, World!

前に述べたように、 go run コマンドは、ソースファイルを実行可能バイナリにビルドしてから、コンパイルされたプログラムを実行しました。 ただし、このチュートリアルは、自由に共有および配布できるようにバイナリを構築することを目的としています。 これを行うには、 go build 次のステップでコマンドを実行します。

ステップ2—Goバイナリを構築するためのGoモジュールの作成

Goプログラムとライブラリは、モジュールのコアコンセプトに基づいて構築されています。 モジュールには、プログラムで使用されるライブラリと、それらのライブラリのどのバージョンを使用するかに関する情報が含まれています。

これがGoモジュールであることをGoに伝えるには、Goモジュールを使用して作成する必要があります。 go mod 指図:

  1. go mod init greeter

これによりファイルが作成されます go.mod、モジュールの名前と、モジュールのビルドに使用されたGoのバージョンが含まれます。

Output
go: 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 ディレクトリで、次のコマンドを実行します。

  1. go build

このコマンドに引数を指定しない場合は、 go build 自動的にコンパイルされます main.go 現在のディレクトリにあるプログラム。 コマンドにはすべての *.go ディレクトリ内のファイル。 また、システムに .go ソースファイル、またはGoインストールですら。

この場合、あなたはあなたを構築しました greeter 現在のディレクトリに追加された実行可能ファイルにアプリケーションを追加します。 を実行してこれを確認してください ls 指図:

  1. ls

macOSまたはLinuxを実行している場合は、プログラムをビルドしたディレクトリにちなんで名付けられた新しい実行可能ファイルが見つかります。

Output
greeter main.go go.mod

注: Windowsでは、実行可能ファイルは次のようになります。 greeter.exe.

デフォルトでは go build 現在のプラットフォームとアーキテクチャの実行可能ファイルを生成します。 たとえば、 linux/386 システム、実行可能ファイルは他のものと互換性があります linux/386 Goがインストールされていない場合でもシステム。 Goは、他のプラットフォームおよびアーキテクチャー向けの構築をサポートしています。詳細については、さまざまなオペレーティングシステムおよびアーキテクチャー向けのGoアプリケーションの構築の記事を参照してください。

これで実行可能ファイルが作成されたので、実行可能ファイルを実行して、バイナリが正しく作成されていることを確認します。 macOSまたはLinuxでは、次のコマンドを実行します。

  1. ./greeter

Windowsでは、次を実行します。

  1. greeter.exe

バイナリの出力は、プログラムを実行したときの出力と一致します。 go run:

Output
Hello, 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は、ビルドプロセス中にそれを独自に実行します。

次を実行します go build とのコマンド -o 国旗:

  1. go build -o bin/hello

The -o フラグを設定すると、Goはコマンドの出力を選択した引数に一致させます。 この場合、結果はという名前の新しい実行可能ファイルになります hello 名前の付いたサブフォルダ内 bin.

新しい実行可能ファイルをテストするには、新しいディレクトリに移動して、バイナリを実行します。

  1. cd bin
  2. ./hello

次の出力が表示されます。

Output
Hello, World!

これで、プロジェクトのニーズに合わせて実行可能ファイルの名前をカスタマイズして、Goでバイナリを構築する方法の調査を完了することができます。 しかし、 go build、現在のディレクトリからのバイナリの実行に制限されています。 システムのどこからでも新しく構築された実行可能ファイルを使用するために、を使用してそれらをインストールできます go install.

ステップ5—Goプログラムをインストールする go install

この記事のこれまでのところ、実行可能バイナリを生成する方法について説明してきました。 .go ソースファイル。 これらの実行可能ファイルは、配布、展開、およびテストに役立ちますが、ソースディレクトリの外部からはまだ実行できません。 これは、シェルスクリプトや他のワークフローでプログラムを積極的に使用したい場合に問題になります。 プログラムを使いやすくするために、システムにインストールして、どこからでもアクセスできます。

これが何を意味するのかを理解するには、 go install サンプルアプリケーションをインストールするコマンド。

The go install コマンドはほぼ同じように動作します go build、ただし、実行可能ファイルを現在のディレクトリ、またはで指定されたディレクトリに残す代わりに -o フラグ、実行可能ファイルをに配置します $GOPATH/bin ディレクトリ。

あなたの場所を見つけるために $GOPATH ディレクトリが見つかったら、次のコマンドを実行します。

  1. go env GOPATH

受信する出力は異なりますが、デフォルトは go あなたの内部のディレクトリ $HOME ディレクトリ:

Output
$HOME/go

以来 go install 生成された実行可能ファイルをのサブディレクトリに配置します $GOPATH 名前付き bin、このディレクトリはに追加する必要があります $PATH 環境変数。 これについては、前提条件の記事Goのインストール方法とローカルプログラミング環境のセットアップGoワークスペースの作成ステップで説明されています。

とともに $GOPATH/bin ディレクトリを設定し、に戻ります greeter ディレクトリ:

  1. cd ..

次に、installコマンドを実行します。

  1. go install

これにより、バイナリがビルドされ、に配置されます $GOPATH/bin. これをテストするには、次を実行します。

  1. ls $GOPATH/bin

これはの内容を一覧表示します $GOPATH/bin:

Output
greeter

注: go install コマンドはをサポートしません-o フラグを設定するため、実行可能ファイルに名前を付けるために前述のデフォルト名を使用します。

バイナリをインストールした状態で、プログラムがソースディレクトリの外部から実行されるかどうかをテストします。 ホームディレクトリに戻ります。

  1. cd $HOME

プログラムを実行するには、以下を使用します。

  1. greeter

これにより、次のようになります。

Output
Hello, World!

これで、作成したプログラムをシステムにインストールして、必要なときにいつでもどこからでも使用できるようになります。

結論

このチュートリアルでは、Goツールチェーンを使用してソースコードから実行可能バイナリを簡単に構築する方法を示しました。 これらのバイナリは、Goツールや環境がないシステムでも、他のシステムで実行するために配布できます。 あなたも使用しました go install システムの実行可能ファイルとしてプログラムを自動的にビルドしてインストールします $PATH. と go buildgo install、アプリケーションを自由に共有して使用できるようになりました。

これで、の基本を理解できました go buildビルドタグを使用したGoバイナリのカスタマイズチュートリアルでモジュラーソースコードを作成する方法、またはさまざまなオペレーティングシステムとアーキテクチャ用のGoアプリケーションのビルドを使用してさまざまなプラットフォーム用にビルドする方法を調べることができます。 Goプログラミング言語全般について詳しく知りたい場合は、Goシリーズのコーディング方法全体を確認してください。