前書き

これまでのhttps://www.digitalocean.com/community/tutorial_series/how-to-code-in-go [Goシリーズのコーディング方法]では、コマンドhttps://www.digitalocean.comを使用しました。 / community / tutorials / how-to-write-your-first-program-in-go#step-2-%E2%80%94-running-a-go-program [+ go run +]で自動的にコンパイルしますソースコードを作成し、結果の実行可能ファイルを実行します。 このコマンドはコマンドラインでコードをテストするのに便利ですが、アプリケーションを配布またはデプロイするには、共有可能な_binary実行可能ファイル、またはアプリケーションを実行できるマシンバイトコードを含む単一のファイルにコードをビルドする必要があります。 これを行うには、Goツールチェーンを使用してプログラムを_build_および_install_できます。

Goでは、ソースコードをバイナリ実行可能ファイルに変換するプロセスは_building_と呼ばれます。 この実行可能ファイルがビルドされると、アプリケーションだけでなく、ターゲットプラットフォームでバイナリを実行するために必要なすべてのサポートコードも含まれます。 つまり、Goバイナリは、https://www.digitalocean.com/community/tutorial_series/how-to-code-in-rubyなどの他の言語とは異なり、新しいシステムで実行するためにGoツールなどのシステム依存関係を必要としません[ Ruby]、https://www.digitalocean.com/community/tutorial_series/how-to-code-in-python-3 [Python]、またはhttps://www.digitalocean.com/community/tutorials/how-to -node-js [Node.js]で最初のプログラムを作成して実行します。 これらの実行可能ファイルを独自のシステムの実行可能ファイルパスに配置すると、システムのどこからでもプログラムを実行できます。 これは、システムへのプログラムの_インストール_と呼ばれます。

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

前提条件

この記事の例を実行するには、次のものが必要です。

  • Goのインストール方法に従ってセットアップされたGoワークスペースローカルプログラミング環境のセットアップ]。

Goバイナリのセットアップと実行

まず、Goツールチェーンのデモ用のサンプルとして使用するアプリケーションを作成します。 これを行うには、https://www.digitalocean.com/community/tutorials/how-to-write-your-first-program-in-go [How To]の古典的な「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`コマンドを使用します。

`+ go build`でGoバイナリをビルドする

`+ go build +`を使用すると、サンプルのGoアプリケーション用の実行可能バイナリを生成でき、プログラムを希望する場所に配布およびデプロイできます。

`+ main.go `でこれを試してください。 ` greeter +`ディレクトリで、次のコマンドを実行します。

go build

このコマンドに引数を指定しない場合、 `+ go build `は現在のディレクトリの ` main.go `プログラムを自動的にコンパイルします。 このコマンドには、ディレクトリ内のすべての ` *。go `ファイルが含まれます。 また、システムに ` .go +`ソースファイルやGoインストールがあるかどうかに関係なく、同じシステムアーキテクチャのコンピューターでバイナリを実行できるようにするために必要なすべてのサポートコードをビルドします。

この場合、現在のディレクトリに追加された実行可能ファイルに `+ greeter `アプリケーションを構築しました。 これを確認するには、 ` ls +`コマンドを実行します:

ls

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

Output  main.go

デフォルトでは、「+ go build 」は現在のhttps://www.digitalocean.com/community/tutorials/building-go-applications-for-different-operating-systems-and-architectures#possible-platforms-の実行可能ファイルを生成しますfor-goos-and-goarch [プラットフォームとアーキテクチャ]。 たとえば、 ` linux / 386 `システムでビルドされた場合、Goがインストールされていなくても、実行可能ファイルは他のすべての ` linux / 386 +`システムと互換性があります。 Goは、他のプラットフォームとアーキテクチャのビルドをサポートしています。詳細については、https://www.digitalocean.com/community/tutorials/building-go-applications-for-different-operating-systems-and-architectures [Building]をご覧ください。さまざまなオペレーティングシステムとアーキテクチャのアプリケーションに移動]の記事。

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

./greeter

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

greeter.exe

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

OutputHello, World!

これで、プログラムだけでなく、そのバイナリの実行に必要なすべてのシステムコードを含む単一の実行可能バイナリが作成されました。 これで、このプログラムを新しいシステムに配布したり、サーバーに展開したりできるようになり、ファイルが常に同じプログラムを実行することがわかります。

次のセクションでは、このチュートリアルでは、プログラムのビルドプロセスをより適切に制御できるように、バイナリの命名方法と変更方法について説明します。

バイナリ名の変更

実行可能ファイルを生成する方法がわかったので、次のステップは、Goがバイナリの名前を選択する方法を特定し、この名前をプロジェクトに合わせてカスタマイズすることです。

`+ go build`を実行すると、デフォルトではGoが生成された実行可能ファイルの名前を自動的に決定します。 これは、2つの方法のいずれかで行われます。https://github.com/golang/go/wiki/Modules [Go Modules]を使用している場合、Goはモジュール名の最後の部分を使用します。それ以外の場合、Goは現在のディレクトリの名前を使用します。 これは、「+ greeter 」ディレクトリを作成し、そこに変更してから「 go build +」を実行したときに、最後のセクションで使用した方法です。

モジュール方式を詳しく見てみましょう。 プロジェクトに次のような + module`宣言を持つ + go.mod`ファイルがある場合:

go.mod

module

生成された実行可能ファイルのデフォルト名は「++」になります。

特定の命名規則を必要とするより複雑なプログラムでは、これらのデフォルト値が常にバイナリの命名に最適な選択とは限りません。 これらの場合、 `+ -o +`フラグで出力をカスタマイズするのが最善でしょう。

これをテストするには、最後のセクションで作成した実行可能ファイルの名前を「+ hello 」に変更し、「 bin +」というサブフォルダーに配置します。 このフォルダーを作成する必要はありません。 Goは、ビルドプロセス中にそれを独自に行います。

`+ -o `フラグを指定して、次の ` go build`コマンドを実行します。

go build -o bin/hello

`+ -o `フラグにより​​、Goはコマンドの出力を選択した引数に一致させます。 この場合、結果は「 bin 」という名前のサブフォルダーにある「 hello +」という名前の新しい実行可能ファイルです。

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

cd bin
./hello

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

OutputHello, World!

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

`+ go install`でGoプログラムをインストールする

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

これが何を意味するのかを理解するために、 `+ go install`コマンドを使用してサンプルアプリケーションをインストールします。

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

`+ $ GOPATH +`ディレクトリの場所を見つけるには、次のコマンドを実行します:

go env GOPATH

受け取る出力はさまざまですが、デフォルトは、 `+ $ HOME `ディレクトリ内の ` go +`ディレクトリです。

Output$HOME/go

`+ go install `は生成された実行可能ファイルを ` bin `という名前の ` $ GOPATH `のサブディレクトリに配置するため、このディレクトリを ` $ PATH +`環境変数に追加する必要があります。 これは、前提条件の記事https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-の* Creating Your Go Workspace *ステップで説明されていますfor-go [Goをインストールしてローカルプログラミング環境をセットアップする方法]。

`+ $ GOPATH / bin `ディレクトリを設定したら、 ` greeter +`ディレクトリに戻ります:

cd ..

次に、インストールコマンドを実行します。

go install

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

ls $GOPATH/bin

これにより、 `+ $ GOPATH / bin +`の内容がリストされます。

Outputgreeter

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

cd $HOME

次を使用してプログラムを実行します。

greeter

これにより、次の結果が得られます。

OutputHello, World!

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

結論

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

`+ go build +`の基本を理解したので、https://www.digitalocean.com/community/tutorials/customizing-go-binaries-with-build-tagsを使用してモジュラーソースコードを作成する方法を調べることができます[ビルドタグを使用したGoバイナリのカスタマイズ]チュートリアル、またはhttps://www.digitalocean.com/community/tutorials/building-go-applications-for-different-operating-systems-and-architectures[Building]を使用してさまざまなプラットフォーム向けにビルドする方法さまざまなオペレーティングシステムおよびアーキテクチャ向けのGoアプリケーション]。 Goプログラミング言語全般について詳しく知りたい場合は、https://www.digitalocean.com/community/tutorial_series/how-to-code-in-go [Goのコーディング方法シリーズ]全体をご覧ください。 ]。