go versionを実行してバージョンが表示されない、またはgo: command not foundと出るなら、まずツールチェーンを入れます。インストール後もgo versionで導入を確認し、プロジェクト直下にgo.modを置いてモジュールを初期化できる状態を整えます。
公式インストーラ
OS用のインストーラを入れます。
go versiongo version go1.26.x ...のように、リリース履歴に載る最新の安定版が表示されれば成功です。
コンパイラが入ったら、プロジェクトの境界をgo.modで定義します。
モジュール
Go 1.16以降、モジュールモードがデフォルトです(モジュール自体はGo 1.11で導入)。プロジェクトルートのgo.modにモジュール名と依存が記録されます。それ以前はGOPATHという作業領域の下にソースと取得した依存を置き、importパスもそのツリーに合わせる必要がありました。GOPATH前提の古い手順のまま進めるとimportパスが合わなくなることがあるため、モジュールモードではgo.modがあるディレクトリをプロジェクトの基準にします。
mkdir hello
cd hello
go mod init example.com/helloよく使うコマンド
| コマンド | 説明 |
|---|---|
go run . | ビルドして実行 |
go build | 実行ファイルを生成。-oで出力名を指定(例: go build -o hello .)。-o省略時はカレントディレクトリ名がそのまま実行ファイル名になる |
go test ./... | テストを実行 |
go fmt ./... | 整形 |
動作確認の例:
go mod init example.com/checkpackage main
import "fmt"
func main() {
fmt.Println("toolchain ok")
}go run .
go fmt .import "fmt"を書いたままfmtを一度も使わないと、コンパイルエラーになります。Goは未使用のimportや変数を許さないため、「何を使うか」をコード上で明示する必要があります。実行可能プログラムを作るにはpackage mainとfunc main()が必要ですが、ソースのファイル名はmain.goに固定されていません。hello.goのように任意の名前にできますが、慣習としてmain.goを使うことが多いです。
Hello, World
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}go run main.goソースの構成
先頭のpackage宣言、import、引数なしのfunc main()が、実行可能プログラムの骨格です。同一ディレクトリの.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"))
}1ファイルだけのときはgo run main.goで足ります。複数ファイルがあるときにgo run main.goだけでは他ファイルが含まれないため、go run .でディレクトリごとビルドします。go runはビルド結果を一時的に実行するだけです。実行ファイルを残すときはgo build -o hello .のように-oで名前を付けて出力します。