
こんにちは。よっしーです(^^)
本日は、Go言語の言語仕様について解説しています。
背景
Go言語を学び始めて、公式の「The Go Programming Language Specification(言語仕様書)」を開いてみたものの、「英語で書かれていて読むのが大変…」「専門用語ばかりで何を言っているのかわからない…」と感じたことはありませんか? 実は、多くのGo初心者が同じ壁にぶつかっています。
言語仕様書は、Go言語の「正式な取扱説明書」のような存在です。プログラミング言語がどのように動くのか、どんなルールで書くべきなのかが詳しく書かれていますが、その分、初めて読む人には難しく感じられるのも事実です。
そこでこの記事では、言語仕様書の導入部分を丁寧な日本語訳とともに、初心者の方でも理解しやすい補足説明を加えてお届けします。「強く型付けされている」「ガベージコレクション」「並行プログラミング」といった専門用語も、具体例を交えながらわかりやすく解説していきます。
言語仕様書は難しそうに見えますが、一つひとつの概念を丁寧に読み解いていけば、必ず理解できます。一緒に、Go言語の基礎をしっかり学んでいきましょう!
switch文(Switch statements)
switch 文は多方向の実行を提供する。式または型が switch 内の「ケース」と比較され、どの分岐を実行するかが決定される。
SwitchStmt = ExprSwitchStmt | TypeSwitchStmt .
2つの形式がある。式switch と 型switch である。式switch では、ケースにはswitch式の値と比較される式が含まれる。型switch では、ケースには特別に注釈されたswitch式の型と比較される型が含まれる。switch式は switch 文において正確に一度だけ評価される。
解説
switch文ってなに?
switch 文は、値や型に応じて処理を分岐させる制御構文です。if-else if-else の連鎖をよりすっきり書けます。
// if-else if で書くと長い
if x == 1 {
fmt.Println("one")
} else if x == 2 {
fmt.Println("two")
} else if x == 3 {
fmt.Println("three")
} else {
fmt.Println("other")
}
// switch で書くとすっきり
switch x {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
default:
fmt.Println("other")
}
2つの形式
Go の switch には2種類あります。この節はその導入で、詳細は後続の節で説明されます。
1. 式switch(Expression switch)
値を比較して分岐します。最も一般的な使い方です。
switch day {
case "Monday":
fmt.Println("週の始まり")
case "Friday":
fmt.Println("もうすぐ週末")
default:
fmt.Println("普通の日")
}
2. 型switch(Type switch)
インターフェースの中身の型を判定して分岐します。
switch v := x.(type) {
case int:
fmt.Println("整数:", v)
case string:
fmt.Println("文字列:", v)
default:
fmt.Println("その他の型")
}
「正確に一度だけ評価される」の意味
switch式(switch の後に書く式)は一度だけ評価されます。各 case と比較するたびに評価されるわけではありません。
switch expensiveFunction() { // 1回だけ呼ばれる
case 1:
// ...
case 2:
// ...
case 3:
// ...
}
もし毎回評価されたら、関数が3回呼ばれてしまいますが、実際には1回だけです。副作用のある関数を使うときにこの点は重要になります。
Go の switch は C と違う
後続の節で詳しく説明されますが、Go の switch には C 言語との大きな違いがあります。
breakが不要:各caseの終わりで自動的に停止する(C ではbreakを書き忘れると次のケースに落ちる)caseに複数の値を書ける:case 1, 2, 3:のように- 条件なし switch が書ける:
switch { case x > 0: ... }のようにif-elseの代わりとして使える
これらの詳細は、次の「式switch」と「型switch」の節で順番に見ていきます。
おわりに
本日は、Go言語の言語仕様について解説しました。

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)

コメント