Go言語の環境構築
2026/09/15

ツールチェーンのインストール

公式のダウンロードページから、利用しているOS向けのインストーラまたはアーカイブを入手してインストールします。

ターミナルを開き、go versionを実行してツールチェーンが導入されたか確認します。

go version

次のようにバージョン情報が表示されれば、正しくインストールされています。正しくインストールされていない場合はcommand not foundなどのエラーが出ます。

go version go1.27.1 windows/amd64

最新の安定版情報はリリース履歴で確認できます。

プロジェクトの作成とモジュールの初期化

Go言語では、プログラムをモジュールという単位で管理します。プロジェクト用のディレクトリを作成し、その直下でgo mod initを実行してモジュールを初期化します。

mkdir hello
cd hello
go mod init example.com/hello

実行すると、プロジェクトのルートにgo.modが作成されます。初期状態ではモジュール名とGo言語のバージョンが書かれ、外部パッケージを追加すると依存もここに記録されます。

Go言語1.16以降はモジュールモードが標準のため、任意のディレクトリでプロジェクトを開始できます。旧来のGo言語のように、決められた作業領域(GOPATH)の下にソースコードを配置する必要はありません。

Hello, Worldの実行

初期化したディレクトリ内にプログラムファイルを作成し、動作を確認します。ソースファイルのファイル名に言語仕様上の縛りはなく、hello.goなど任意の名前にできますが、エントリポイントを含むファイルには慣習としてmain.goが広く使われます。

package main

import "fmt"

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

プログラムを実行するには、ファイル名を直接指定してgo run main.goを実行します。

go run main.go

カレントディレクトリを指定するgo run .でも同様に実行できます。末尾の.はカレントディレクトリのパッケージ全体を対象にすることを表します。ファイルが1つだけのときはどちらでも動作します。

go run .

ターミナルにHello, Worldと出力されれば、コンパイルと実行が正常に行われています。

プログラムの基本構成

実行可能なプログラムには、package mainの宣言と、引数も戻り値もないfunc main()が必要です。

先頭のpackage mainが、このパッケージがエントリポイントであることを示します。他パッケージを使うときはimportで取り込みます。上の例では標準ライブラリの入出力のためにimport "fmt"を書き、func main()の中でfmt.Printlnを呼んでいます。

Go言語では、使っていないimportや、関数内で宣言したまま使っていない変数があるとコンパイルエラーになります。

複数ファイルでの構成

同一ディレクトリにある複数の.goファイルは、同じpackage句を書くことで1つのパッケージとしてまとまります。別ファイルで定義した関数も、同じパッケージ内であればそのまま呼び出せます。

たとえばgreet.goに関数を定義し、main.goのfunc main()から呼び出す例です。

// greet.go
package main

func greet(name string) string {
    return "Hello, " + name
}
// main.go
package main

import "fmt"

func main() {
    fmt.Println(greet("Go言語"))
}

複数ファイルがある環境でgo run main.goのように単一ファイルのみを指定すると、他のファイルがコンパイル対象に含まれず、undefined: greetのような未定義エラーになります。ファイルを並べてgo run main.go greet.goと実行することもできますが、ファイルが増えるごとに指定が必要になるため、日常的にはカレントディレクトリのパッケージ全体をまとめてビルド・実行するgo run .を使用します。

基本的なコマンド

go run

一時的にコンパイルしてプログラムを即座に実行します。開発中にすぐ動かしたい場合に使います。

go run .

go build

実行可能バイナリを生成します。配布やデプロイ用のファイルを書き出すときに使います。-oオプションで出力ファイル名を指定できます。省略した場合は、モジュール名の末尾(この例ではhello)が実行ファイル名になります。

go build -o hello .

go fmt

Go言語の標準スタイルに従ってソースコードを自動整形します。インデントや改行位置が一貫した形式に整います。ディレクトリ配下を一括で整形するときは./...を指定します。

go fmt ./...

go test

パッケージ内のテストコード(_test.go)を検出して実行します。

go test ./...