Golang の if による条件分岐

Go 言語の if 文の構文は、Java や C++ とほぼ同じですが、括弧の使用ルールが微妙に異なります。

if 文の構文

Go 言語の if 文は、条件部を括弧で囲みません。 一方で、実行部分のブロックを囲む中括弧({})は省略することができません。

x, y := 100, 200
if x > y {
	fmt.Println("x is larger than y")
} else if x < y {
	fmt.Println("x is smaller than y")
} else {
	fmt.Println("x is equal to y")
}

比較演算子としては、Java や C++ と同様の ==!=<<=>>= が使用できます。 文字列の比較も == 演算子で行えます。 論理演算子も同様に、||&&! を使用できます。

s := "hemu"
x, y := 100, 200
if s == "hemu" && x < y {
	// ...
}

ちなみに Go 言語には Java や C++ のような三項演算子 (a ? b : c) は用意されていません。 言語として三項演算子や if 式を採用してしまうと、複雑なコードが書かれやすいというのが理由っぽいです(適度に使えば便利なんですけどね^^;)。

if スコープの変数

if 変数定義; 条件式 {
	// ...
}

という形で変数定義を行うと、その変数のスコープを if あるいは、else のブロック内に制限することができます。 例えば、下記のように記述すると、err 変数は if の条件式と処理ブロックの中でのみ参照できるようになります。

if err := recover(); err != nil {
	log.Fatal(err)
}

次の例では、マップ変数 m にキー AAA が存在するときのみ、その値を参照しています。

m := map[string]int{
	"AAA": 100,
	"BBB": 200,
	"CCC": 300,
}

if val, ok := m["AAA"]; ok {
	fmt.Println(val)
}