Go ごー
Golang静的型付けコンパイル言語並行処理goroutineGoogle
Goについて教えて
簡単に言うとこんな感じ!
GoはGoogleが作ったプログラミング言語だよ!「速くて・シンプルで・大量のリクエストをさばくのが得意」な言語なんだ。クラウドサービスやAPIサーバーの裏側でよく使われてて、DockerやKubernetesもGoで作られてるよ!
Goとは
Go(別名:Golang)は、Googleが2009年に公開したオープンソースのプログラミング言語です。C言語のような高速な実行性能を持ちながら、Pythonのようなシンプルな文法を実現することを目標に設計されました。コードを機械語に変換するコンパイル言語であるため、実行ファイルはそのまま動かせる「1ファイル完結」型で、サーバーへのデプロイが簡単なのも大きな特徴です。
Goが特に強みを発揮するのが並行処理(同時に複数の処理を走らせること)です。goroutine(ゴルーチン) という軽量スレッド機能を言語レベルでサポートしており、何万もの並行処理をメモリ効率よく動かすことができます。そのため、マイクロサービス・APIサーバー・クラウドインフラツールなど、大量のリクエストを高速に処理する用途で広く採用されています。
Goの主な特徴
| 特徴 | 内容 |
|---|---|
| 静的型付け | 変数の型をコンパイル時にチェック。バグを早期発見できる |
| 高速コンパイル | 大規模プロジェクトでも数秒でビルド完了 |
| シングルバイナリ | コンパイル結果が1つの実行ファイルになる。デプロイが楽 |
| goroutine | 超軽量な並行処理単位。スレッドより少ないメモリで動く |
| GC(ガベージコレクション) | メモリ管理を自動化。C/C++のような手動管理不要 |
| シンプルな文法 | キーワード数が25個と少なく、学習コストが低い |
覚え方:「速・シン・並」
Goの3大特徴は 「速い(Speed)・シンプル(Simple)・並行処理(goroutine)」 の頭文字で「速シン並(そくしんなみ)」と覚えよう!
goroutineのイメージ
通常のスレッド(重い)
[スレッド1: 約1MB] [スレッド2: 約1MB] ...数百が限界
goroutine(軽い)
[goroutine: 約2KB] [goroutine: 約2KB] [goroutine: 約2KB]
...数万〜数十万を同時に起動できる!
歴史と背景
- 2007年 — Google社内でRobert Griesemer・Rob Pike・Ken Thompsonの3名が設計開始。巨大なC++コードのビルド遅延と複雑さへの不満が開発動機
- 2009年11月 — オープンソースとして公開。初期リリース(Go 1.0以前)
- 2012年3月 — Go 1.0リリース。後方互換性の保証(Go 1 compatibility promise)を宣言
- 2013〜2015年 — Docker(2013年)・Kubernetes(2014年)がGoで実装され、クラウドインフラ界での地位を確立
- 2021年3月 — Go 1.16でモジュール管理がデフォルト化。依存関係管理が大幅改善
- 2022年3月 — Go 1.18でジェネリクス(型パラメータ)が導入。長年の要望がついに実現
- 現在 — Stack Overflow Developer Survey 2023で「最も愛されている言語」上位に継続ランクイン
他のプログラミング言語との比較
| 比較軸 | Go | Python | Java | Rust |
|---|---|---|---|---|
| 実行速度 | ◎ 速い | △ 遅い | ○ 速い | ◎ 最速 |
| 学習コスト | ○ 低い | ◎ 最低 | △ 高い | × 非常に高い |
| 並行処理 | ◎ goroutine | △ 難しい | ○ Thread | ○ async |
| デプロイ | ◎ 1バイナリ | △ 環境依存 | △ JVM必要 | ◎ 1バイナリ |
| 主な用途 | APIサーバー・CLI | AI・スクリプト | エンタープライズ | OS・組込み |
関連する規格・RFC
※ Goはオープンソース言語であり、IETFやISOの規格ではなくGoogle主導の仕様で定義されています。関連する標準規格はありませんが、GoのHTTPライブラリはRFC準拠で実装されています。
| 参照仕様 | 内容 |
|---|---|
| Go Language Specification | Go言語の公式仕様書(Google管理) |
| RFC 7230 | GoのHTTPパッケージが準拠するHTTP/1.1仕様 |