Go入門 - 環境構築とHello World
.NET (C#) の経験がある開発者向けに、Goのインストール、go コマンド、エディタ設定、最初のプログラムの作成までを解説します。
1. Goのインストール
公式インストーラー
go.dev/dl から OS 別のインストーラーまたはアーカイブを取得します。
# Linux (アーカイブ展開の例。バージョンは適宜読み替える)
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.xx.x.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
# macOS (Homebrew)
brew install go
# Windows (winget)
winget install GoLang.Go
インストール確認:
go version
go env GOPATH GOROOT GOOS GOARCH
バージョン管理
.NET の global.json に相当する仕組みが、go.mod の go / toolchain ディレクティブです。Go 1.21 以降は、go.mod が要求するバージョンが手元より新しい場合、必要なツールチェーンを自動で取得して使用します (GOTOOLCHAIN 環境変数で制御)。
module example.com/hello
go 1.24
複数バージョンを手動で切り替えたい場合は、公式の golang.org/dl で取得するか、mise / asdf などのバージョンマネージャーを使います。
2. .NET との対応表
| .NET (C#) | Go |
|---|---|
dotnet new console | go mod init <module> + main.go を作成 |
dotnet run | go run . |
dotnet build | go build |
dotnet publish | go build / go install (成果物は単一バイナリ) |
dotnet add package | go get <module> |
dotnet restore | go mod download (通常は自動) |
dotnet format | gofmt / go fmt ./... |
| Roslyn アナライザー | go vet ./... / golangci-lint |
dotnet test | go test ./... |
global.json | go.mod の go / toolchain |
| Visual Studio / Rider / C# Dev Kit | VS Code + gopls / GoLand |
3. 主要な go コマンド
| コマンド | 役割 |
|---|---|
go mod init <module> | go.mod を作成してモジュールを初期化する |
go run . | カレントパッケージをコンパイルして即実行する (成果物は一時ディレクトリに作られる) |
go build | コンパイルして実行ファイルを生成する |
go install | ビルドして $GOPATH/bin (または GOBIN) に配置する。CLI ツールの導入にも使う |
go fmt ./... | 標準フォーマッタ (gofmt) で整形する |
go vet ./... | バグになりやすいコードを静的解析で検出する |
go test ./... | テストを実行する |
go mod tidy | 使っていない依存を除去し、不足している依存を追加する |
go doc <pkg> | ドキュメントをターミナルで参照する |
./... は「カレントディレクトリ配下の全パッケージ」を意味するワイルドカードです。
4. エディタのセットアップ
VS Code
- 拡張機能 Go (Go Team at Google) をインストールする
- コマンドパレットで
Go: Install/Update Toolsを実行し、gopls(言語サーバー) とdlv(デバッガー) などを導入する
推奨設定 (settings.json):
{
"go.formatTool": "gofmt",
"editor.formatOnSave": true,
"[go]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
}
保存時にフォーマットと import の整理が自動で行われます。Go では import の並び順もツールが決めます。
GoLand
JetBrains Rider に近い使い勝手の商用 IDE です。インストールするだけで Go SDK 検出、デバッガー、リファクタリングが揃います。
5. Hello World
プロジェクトの作成
mkdir hello && cd hello
go mod init example.com/hello
go.mod が生成されます。.csproj に相当しますが、ファイルを列挙する必要はなく、ディレクトリ内の .go ファイルが自動的に対象になります。
main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
実行とビルド
go run . # 実行
go build -o hello . # バイナリ生成 (Windows は hello.exe)
./hello # 生成したバイナリを実行
C# との比較
// Program.cs (トップレベルステートメント)
Console.WriteLine("Hello, C#!");
// main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
- Go にはトップレベルステートメントがないため、
package mainとfunc main()が必須です。 - 実行可能プログラムは
package mainにmain関数を置いたものです。それ以外のパッケージはライブラリになります。 importしたパッケージを使わないとコンパイルエラーになります。
もう少し実用的な例
引数を受け取り、エラーを処理する例です。
package main
import (
"fmt"
"os"
"strconv"
)
func main() {
if len(os.Args) < 2 {
fmt.Fprintln(os.Stderr, "usage: hello <count>")
os.Exit(1)
}
n, err := strconv.Atoi(os.Args[1])
if err != nil {
fmt.Fprintf(os.Stderr, "invalid count: %v\n", err)
os.Exit(1)
}
for i := range n {
fmt.Printf("Hello #%d\n", i+1)
}
}
go run . 3
for i := range n (整数に対する range) は Go 1.22 以降で使えます。
外部パッケージを使う
go get github.com/google/uuid
package main
import (
"fmt"
"github.com/google/uuid"
)
func main() {
fmt.Println(uuid.NewString())
}
go get で go.mod が更新され、チェックサムが go.sum に記録されます。go.mod と go.sum はどちらもコミットします。go.sum は packages.lock.json に近い役割です。
6. C# 開発者がつまずきやすいポイント
go runは単一ファイルではなくパッケージ単位:go run main.goでも動きますが、ファイルが複数に分かれたらgo run .を使います。- GOPATH は意識しなくてよい: 昔は
GOPATH配下にソースを置く必要がありましたが、現在は Go Modules により任意のディレクトリでプロジェクトを作成できます。GOPATHは主にダウンロードしたモジュールのキャッシュ ($GOPATH/pkg/mod) とインストール先 ($GOPATH/bin) に使われます。 - インストールしたツールが見つからない:
go installしたコマンドは$(go env GOPATH)/binに置かれます。ここをPATHに追加してください。 - フォーマットは議論しない: インデントはタブ、波括弧は行末に置きます。
gofmtの出力が正です。設定項目はありません。 - 波括弧の位置は文法の一部:
func main()の直後で改行して{を置くとコンパイルエラーになります (自動セミコロン挿入のため)。 - 未使用の変数・import はエラー: 一時的に使わない変数は
_ = xや_で明示的に捨てます。 mainパッケージ以外は実行できない: ライブラリはgo buildしてもバイナリが生成されません。型チェックのみ行われます。- ビルド成果物は
bin/obj/に散らばらない:go buildはカレントディレクトリに実行ファイルを出力します (-oで変更可能)。.gitignoreに追加しておきましょう。
7. まとめ
- インストールは公式インストーラーだけで完了し、
go.modのgo/toolchainでバージョンを固定できる (Go 1.21 以降は必要なツールチェーンを自動取得)。 go mod init→go run .→go buildがdotnet new→dotnet run→dotnet publishに相当する基本の流れ。- VS Code + gopls なら、保存時のフォーマット・import 整理・補完・デバッグまで揃う。
- 次はモジュールとパッケージとGoの基本文法へ進む。