Go
Goとは
Go(Golang)は、Google が開発した静的型付けのコンパイル型言語です。「言語仕様を小さく保ち、誰が書いても読みやすいコードになる」ことを重視して設計されています。
package main
import "fmt"
func main() {
fmt.Println("Hello, Go")
}
コンパイルすると単一の実行ファイルが生成され、ランタイムのインストールなしにそのまま配布・実行できます。この手軽さがサーバーやCLIツールの開発で好まれています。
Goの3つの強み
| 強み | 内容 |
|---|---|
| ゴルーチン | 軽量スレッドによる並行処理。数万個を同時に動かせる |
| 高速なビルド | コンパイルが速く、単一バイナリで配布が簡単 |
| シンプルな文法 | 機能を絞った仕様で、チーム内のコードの書き方が揃いやすい |
特に ゴルーチン(goroutine)とチャネル(ゴルーチン間でデータを受け渡す仕組み)による並行処理は Go の代名詞です。go キーワードを付けて関数を呼ぶだけで並行実行できます。
go fetchData() // この関数は別のゴルーチンで並行に実行される
[[並行処理と非同期]] を言語レベルで簡単に扱えるため、多数の通信を同時にさばくネットワークサーバーに向いています。
クラウドインフラを支える言語
Go はクラウドネイティブ時代の共通言語と呼ばれることがあります。実際、[[Docker]] も [[Kubernetes]] も Go で書かれています。ほかにも Terraform、Prometheus など、インフラ分野の主要ツールの多くが Go 製です。
- 単一バイナリで配布できるため、コンテナイメージが小さくなる
- 並行処理が得意で、多数のリクエストをさばくAPIサーバーに向く
- [[マイクロサービス]] の実装言語としても人気が高い
初学者向けポイント
- 公式ツールが充実しており、フォーマッタ(gofmt)・テスト・依存管理がすべて標準で付属します
- エラー処理は例外ではなく戻り値でエラーを返す方式 —
if err != nilのパターンにまず慣れましょう - 言語仕様が小さいため、公式チュートリアル「A Tour of Go」を一周すれば基本文法を押さえられます
関連技術とのつながり
- [[並行処理と非同期]] — ゴルーチンとチャネルは並行処理を学ぶ良い題材
- [[Docker]] — Go 製の代表的ツール。Go 製アプリはコンテナとの相性も良い
- [[Kubernetes]] — こちらも Go 製。クラウドインフラ分野で Go が強い理由の象徴
- [[マイクロサービス]] — 軽量・高速な Go はサービス分割された API 実装の有力候補
Q: Goの並行処理を担う仕組みはどれ?
- [ ] コールバック関数
- [x] ゴルーチンとチャネル
- [ ] ガベージコレクション
解説: Go は軽量スレッドであるゴルーチンと、その間でデータを受け渡すチャネルで並行処理を実現します。
Q: Goのコンパイル結果の特徴はどれ?
- [x] 単一の実行ファイルが生成され、そのまま配布できる
- [ ] JVM用のバイトコードが生成される
- [ ] ブラウザで実行するJavaScriptに変換される
解説: Go はコンパイルすると単一バイナリになり、ランタイムのインストールなしに実行できます。
Q: Goで書かれているツールの組み合わせはどれ?
- [ ] ExcelとPowerPoint
- [ ] PhotoshopとIllustrator
- [x] DockerとKubernetes
解説: Docker や Kubernetes をはじめ、クラウドインフラ分野の主要ツールの多くが Go 製です。