| この記事の要点 |
|
概要
Go(通称 Golang)は、Google の Robert Griesemer・Rob Pike・Ken Thompson らが 2007 年に設計を開始し、2009 年 11 月にオープンソースとして公開された静的型付けコンパイル言語です。「C 言語ほど煩雑でなく、Python ほど遅くなく、Java ほど冗長でない」という現実的なバランスを狙って設計されました。ソースコードの拡張子は .go、コンパイル後はターゲット OS / アーキテクチャに応じた 単一の実行バイナリ が生成されます。
Go の最大の特徴は 並行処理(concurrency)モデル の優秀さです。go キーワードを関数呼び出しの前に置くだけで「goroutine」と呼ばれる軽量スレッドが起動し、channel によってスレッド間で安全に値を受け渡せます。これは Tony Hoare の CSP(Communicating Sequential Processes)理論を実装に落とし込んだものです。さらに ガベージコレクション(GC)を搭載しているため、C / C++ のような手動メモリ管理は不要です。
1.18(2022 年)でジェネリクスが導入され、func Map[T, U any](s []T, f func(T) U) []U のような型パラメータが書けるようになりました。1.21 で min / max / clear の組み込み、1.22 でループ変数のスコープ修正など、後方互換性を慎重に保ちつつ進化を続けています。
用途は CLI ツール・Web API サーバー・マイクロサービス・クラウドネイティブインフラ が中心。Docker・Kubernetes・Terraform・Prometheus・etcd・CockroachDB など、現代のインフラを支えるツールの多くが Go で書かれています。コンパイル速度が極めて速く、CI / CD と相性が良い点も普及の理由です。
ファイル種類とビルド成果物
| 拡張子 / ファイル | 役割 | ビルド経路 |
|---|---|---|
.go | Go ソースコード | 入力 |
go.mod | モジュール定義(モジュール名・Go バージョン・依存) | プロジェクトルート |
go.sum | 依存のチェックサム(ハッシュ検証) | 自動生成 |
実行バイナリ(拡張子なし / .exe) | OS ネイティブ単一バイナリ | go build の出力 |
_test.go | テストコード(同パッケージ内) | go test が拾う |
Go は 中間ファイル(.class / .pyc 等)をユーザーに意識させない 設計です。$GOCACHE に隠れてはいますが、開発者が直接触ることはまずありません。配布物は単一バイナリで完結し、ランタイムや libc を別途配る必要がない(CGO を使わない限り)のが大きな利点です。
「Hello, World」
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
ビルドと実行:
$ go mod init example.com/hello
$ go build -o hello
$ ./hello
Hello, World
# クロスコンパイル(Linux 上で Windows 用バイナリを作る)
$ GOOS=windows GOARCH=amd64 go build -o hello.exe
パッケージ管理・ビルドツール
Go の依存管理は Go Modules(1.11 から導入、1.16 で正式デフォルト)が標準です。go.mod にモジュールパス・Go バージョン・依存を書き、go.sum でハッシュを固定します。
go mod init example.com/myapp # 初期化
go get github.com/gin-gonic/gin # 依存追加
go build ./... # 全パッケージビルド
go test ./... # 全テスト実行
go vet ./... # 静的解析
gofmt -w . # コード整形
go run main.go # コンパイル + 実行(中間バイナリは破棄)
関連言語との比較
| 項目 | Go | Rust | Java | Python |
|---|---|---|---|---|
| 型システム | 静的・GC あり | 静的・GC なし(所有権) | 静的・GC あり | 動的 |
| 配布 | 単一バイナリ | 単一バイナリ | JAR + JVM 必要 | ソース + ランタイム |
| 並行処理 | goroutine + channel | async / await + Send/Sync | Thread / Virtual Thread | asyncio / GIL 制約 |
| 学習コスト | 低(言語仕様が小さい) | 高(所有権が壁) | 中 | 低 |
| コンパイル速度 | 非常に速い | 遅い | 速い | —(インタプリタ) |
注意点・落とし穴
- エラー処理が冗長:
if err != nil { return err }が頻出。例外がないので、エラーは値として明示的に伝播させる必要がある。 - ループ変数のスコープ:1.22 未満では
for _, v := range items { go func() { use(v) }() }のvが共有され、典型的バグになる。1.22 以降はループ毎に新しい変数が作られるので解消。 - nil interface ハマり:型情報を持つ nil(typed nil)と純粋な nil は
==比較で挙動が違う。 - 循環インポート禁止:パッケージ A → B → A は許可されない。設計段階でレイヤを切る必要がある。
- ジェネリクスは後付け:標準ライブラリの多くが
interface{}ベースで設計されているため、新旧 API が混在しがち。
関連リンク
- プログラミング・スクリプト(親カテゴリ)
- ファイル拡張子とは(概論)
- プログラミング言語(カテゴリ)
- Python(.py)
- Rust(.rs)
- Java(.java / .class / .jar)
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- djangoのテンプレートの作成とヘッダー・フッターの共通化 2026-10-03 21:41:49
- テンプレートフラグメント(ヘッダー等の共有化) 2026-10-03 21:41:49
- reCAPTCHA v3 使い方(サンプル付き) 2026-10-03 21:37:05
- Content-Type一覧|MIMEタイプとはとHTTPでの主な使用場面 2026-10-03 21:37:05
- SpringにおけるAOPの使い方 2026-10-03 21:37:05
- X (Twitter) API でツイートできないがエラーが出ない問題の原因と対処 2026-10-03 11:33:01
- X (Twitter) API アプリケーション登録完全ガイド|v2・Bearer Token・OAuth 2.0 PKCE 2026-10-03 11:33:01
- X (Twitter) API 完全ガイド|従量課金の料金・単価(2026年10月)と v2 移行 2026-10-03 11:32:40
- Google DeepMind とは?Gemini・AlphaFold の開発元 2026-10-03 11:26:56
- Cursor とは?AI 統合型コードエディタの使い方・料金 2026-10-03 11:26:56
- Claude (Anthropic) とは?AIチャットの使い方・モデルファミリ・API 2026-10-03 11:26:56
- AIベンダー一覧:OpenAI・Anthropic・Google DeepMind・Microsoft・Meta 2026-10-03 11:26:56
- クラウド・インフラ完全ガイド — AWS/Azure/GCP/Kubernetes 2026-10-03 11:26:56
- テキストエディタ完全比較 (VS Code / Cursor / Vim / Emacs / IDE) 2026-10-03 11:26:56
- プログラミング学習プラットフォーム|Scratch・micro:bit ほか 2026-10-03 11:26:56