Go / Golang (2009年)(ゴーラング)
Goは2009年Google Robert Griesemer・Rob Pike・Ken Thompson が開発したシステムプログラミング言語で並行処理 (Goroutine・Channel) ・静的型付け・GC・シンプル構文 (キーワード25個) 採用しDocker (2013年) ・Kubernetes (2014年) ・Cloudflare・YouTube/Uber等のクラウドネイティブシステムの中核となった現代主要言語。
Go / Golang (2009年)
概要
Goは2009年11月10日Google Robert Griesemer・Rob Pike・Ken Thompson (Unix/C/UTF-8 開発者・Plan 9・Bell Labs) が開発したシステムプログラミング言語で並行処理 (Goroutine・Channel・CSP モデル・1978年Tony Hoare) ・静的型付け・GC・シンプル構文 (キーワード25個・C++ 84・Java 50)・コンパイル時依存解決 (Module Versioning・Go 1.11 2018年)・スタンドアロンバイナリ採用しDocker (2013年Solomon Hykes・Go ベース) ・Kubernetes (2014年Google・Go ベース) ・Cloudflare (Web Edge)・YouTube (一部移行)・Uber (一部移行)・Twitch・Dropbox・PayPal (一部) 等のクラウドネイティブシステムの中核となった現代主要言語。Go 1.22 (2024年2月最新)・Go 1.23 (2024年8月) と継続改良。
主な特徴・仕組み
- 発表: 2009年11月10日Google
- コードネーム: Issue 9 (社内案件)・公式名「Go」・通称「Golang」(検索しやすさで)
- 開発者: Robert Griesemer (V8 Engine・Java HotSpot)・Rob Pike (Plan 9 OS・UTF-8)・Ken Thompson (Unix・C 言語・1983年Turing Award)
- 言語パラダイム: マルチ (手続き型+OOP without inheritance+並行)
- 型付け: 静的型付け (Strong) ・Type Inference (var x := 10)
- GC: Garbage Collection・Pause-time 1ms 未満 (Concurrent Mark-Sweep)
- コンパイル: ネイティブ機械語直接・1秒以下高速コンパイル
- Goroutine: 軽量スレッド (KB 単位メモリ・OS スレッドの1/100)・並行処理革命
- Channel: Goroutine 間通信 (CSP モデル)
- シンプル構文: キーワード25個 (C++ 84・Java 50・Python 35)
Goroutine と Channel (CSP モデル)
2009年Go の並行処理革新:
- CSP (Communicating Sequential Processes): 1978年Tony Hoare 論文 (Erlang 1986年・Occam 1985年で実装)
- Goroutine:
go func() { ... }()でスレッド起動・OS スレッドより軽量 (2KB スタック開始・C++ 1MB) - Channel:
ch := make(chan int)・ch <- 42・v := <-chで同期通信 - メリット: 100万 Goroutine 同時実行可能・C++ 1万スレッドで限界・並行プログラミング革命
- 競合 Rust: async/await (2019年)・Goroutine 後発・現代Rust が並行性で並走
- 後継: 全現代言語が Go から並行性設計学ぶ・Kotlin Coroutines (2018年)・Swift Concurrency (2021年)
Go 主要バージョン (2009-2024年)
| バージョン | 年 | 主な追加機能 |
|---|---|---|
| Go 1.0 | 2012年3月 | 初の安定版・以降仕様後方互換性維持 |
| Go 1.5 | 2015 | コンパイラセルフホスト (C→Go へ書き直し) |
| Go 1.7 | 2016 | Context パッケージ |
| Go 1.11 | 2018 | Modules (依存管理)・WebAssembly 対応 |
| Go 1.13 | 2019 | Error Wrapping |
| Go 1.16 | 2021 | Embed (静的ファイル埋込) |
| Go 1.18 | 2022年3月 | Generics (約10年議論経て遂に対応) ・Workspace |
| Go 1.21 | 2023 | min/max/clear・LSP 改良 |
| Go 1.22 | 2024年2月 | for ループ変数スコープ改良 |
| Go 1.23 | 2024年8月 | Iterator (range-over-function) |
Docker (2013年-) Go 主流化の起点
2013年クラウド時代の幕開け:
- Docker (2013年3月Solomon Hykes・dotCloud): Linux Container 技術・Go 実装
- 動作: アプリケーションとライブラリを「Container」にパッケージ・OS 非依存
- 採用: 全クラウドプラットフォーム (AWS ECS/EKS・Azure ACI/AKS・Google GKE)・大企業
- 歴史的意義: 「Cloud Native = Go」概念確立・以降Go 急成長
Kubernetes (2014年-) Go 帝国の中核
2014年クラウド標準オーケストレーター:
- Kubernetes (2014年6月Google・Joe Beda/Brendan Burns/Craig McLuckie): Borg (Google 内部) のオープン版・Go 実装
- 動作: Docker Container を大規模クラスターで管理 (自動スケール・ヘルスチェック・ロードバランス)
- 採用: 全クラウド (AWS EKS・Azure AKS・Google GKE) ・全大手企業 (Netflix・Spotify・Airbnb・SoundCloud・PayPal)
- CNCF (Cloud Native Computing Foundation・2015年Linux Foundation): Kubernetes 寄贈・現代クラウド標準
Generics (2022年Go 1.18)
10年議論の決着:
- 2009-2021年: Go 設計者「Generics は複雑さを増す」と消極的・コミュニティ強い要望
- 2022年3月Go 1.18 リリース: ついにGenerics 対応・「Type Parameters」命名
- 構文:
func Sum[T int | float64](nums []T) T { ... } - 影響: Go のEnterprise 採用拡大・データ構造ライブラリ充実
採用システム (2009-2024年)
- Cloud Native: Docker (Container)・Kubernetes (Orchestrator)・Prometheus (Monitoring)・Etcd (KV Store)・Grafana (Visualization 一部)
- Web Edge: Cloudflare (Workers・一部Rust 移行)・Fastly
- DevOps: Terraform (HashiCorp 2014年)・Vault (HashiCorp 2015年)・Consul (HashiCorp)
- DB: CockroachDB (2014年・分散SQL)・InfluxDB (時系列)・SurrealDB
- 企業: YouTube (一部・2014年-) ・Uber (一部・2015年-) ・Twitch (Amazon)・Dropbox (一部・2014年-) ・PayPal (一部)
- CLI ツール: GitHub CLI (gh)・kubectl (Kubernetes CLI)・helm (Kubernetes Package Manager)
Ken Thompson と Rob Pike の貢献
Bell Labs 伝説のチーム:
- Ken Thompson (1943-): Unix (1969年) ・C 言語 (1972年Dennis Ritchie と) ・UTF-8 (1992年Rob Pike と) ・1983年Turing Award・Bell Labs→Google (2006年-現在)
- Rob Pike (1956-): Plan 9 OS (1990年代) ・Inferno OS・UTF-8 (1992年Ken Thompson と) ・Bell Labs→Google (2002年-現在)
- Go 開発意義: Bell Labs 系統 (Unix/C/Plan 9) のシステムプログラミング思想を21世紀に継承
関連技術との違い
| 項目 | C++ (1985) | Java (1995) | Go (2009) | Rust (2010) |
|---|---|---|---|---|
| 並行処理 | std::thread (C++11) | Thread/Concurrency Utility | Goroutine+Channel (CSP) | async/await (2019年)+Tokio |
| GC | 手動+smart pointers | あり | **あり (低レイテンシ) ** | なし (Ownership) |
| コンパイル速度 | 遅 (分単位) | 中 (JVM Bytecode) | **超高速 (秒単位) ** | 遅 (分単位) |
| シンプルさ | 複雑 (キーワード84) | 中 (キーワード50) | **シンプル (キーワード25) ** | 中 (キーワード35) |
| 用途 | システム/ゲーム | エンタープライズ/Android | クラウド/サーバ | システム/Web/組込み |
よくある質問 (FAQ)
Q1: なぜGoが「クラウドネイティブ言語」と呼ばれるか? A: (1) Docker (2013年) ・Kubernetes (2014年) ・Prometheus・Etcd 等の主要Cloud Native ツールが Go 実装・(2) コンパイル時静的バイナリで Container 軽量化 (10-50MB)・(3) Goroutine で大量並行処理・(4) GC 低レイテンシでサーバ用途最適・(5) シンプル構文で大人数開発容易・全要因で「クラウド開発の標準言語」確立。
Q2: Go と Rust どちらが優れたか? A: 用途次第。Go: クラウド/サーバ・シンプル・GC で開発速度優位・Kubernetes 等のエコシステム巨大。Rust: システム/組込み・所有権で性能/メモリ安全・Linux カーネル統合 (2022年-) ・WebAssembly 主流。両者並走・Go はWeb 開発・Rust はシステム低層・棲み分け。
Q3: 現代でGo 学ぶ価値は? A: 大いにあり。(1) Cloud Native 開発 (Docker/Kubernetes/Terraform) でGo 必須・(2) 高給職 (世界平均年収$100,000-$170,000)・(3) シンプル構文で学習曲線低・(4) Google/AWS/Cloudflare 等の大手で標準採用・(5) Backend Engineer・SRE・DevOps Engineer 必須スキル・新卒/転職市場で急成長分野。
まとめ
- 2009年Google Robert Griesemer/Rob Pike/Ken Thompson 開発
- システムプログラミング言語
- 並行処理 (Goroutine・Channel)
- シンプル構文・コンパイル時依存解決
- Docker/Kubernetes・クラウドネイティブ中核