メインコンテンツまでスキップ

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 consolego mod init <module> + main.go を作成
dotnet rungo run .
dotnet buildgo build
dotnet publishgo build / go install (成果物は単一バイナリ)
dotnet add packagego get <module>
dotnet restorego mod download (通常は自動)
dotnet formatgofmt / go fmt ./...
Roslyn アナライザーgo vet ./... / golangci-lint
dotnet testgo test ./...
global.jsongo.mod の go / toolchain
Visual Studio / Rider / C# Dev KitVS 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​

  1. 拡張機能 Go (Go Team at Google) をインストールする
  2. コマンドパレットで 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# 開発者がつまずきやすいポイント​

  1. go run は単一ファイルではなくパッケージ単位: go run main.go でも動きますが、ファイルが複数に分かれたら go run . を使います。
  2. GOPATH は意識しなくてよい: 昔は GOPATH 配下にソースを置く必要がありましたが、現在は Go Modules により任意のディレクトリでプロジェクトを作成できます。GOPATH は主にダウンロードしたモジュールのキャッシュ ($GOPATH/pkg/mod) とインストール先 ($GOPATH/bin) に使われます。
  3. インストールしたツールが見つからない: go install したコマンドは $(go env GOPATH)/bin に置かれます。ここを PATH に追加してください。
  4. フォーマットは議論しない: インデントはタブ、波括弧は行末に置きます。gofmt の出力が正です。設定項目はありません。
  5. 波括弧の位置は文法の一部: func main() の直後で改行して { を置くとコンパイルエラーになります (自動セミコロン挿入のため)。
  6. 未使用の変数・import はエラー: 一時的に使わない変数は _ = x や _ で明示的に捨てます。
  7. main パッケージ以外は実行できない: ライブラリは go build してもバイナリが生成されません。型チェックのみ行われます。
  8. ビルド成果物は 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の基本文法へ進む。

参考資料​