Goプログラムを構築してインストールする方法

提供:Dev Guides
移動先:案内検索

序章

これまでの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!プログラムを実行、ビルド、およびインストールし、将来のアプリケーションを効果的に使用、配布、および展開できるようにします。

前提条件

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

ステップ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シリーズのコーディング方法全体を確認してください。