Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

if / else

Goのif文は条件式に丸括弧が不要で、ブロックには必ず波括弧が必要です。条件式の前に初期化式を書ける特徴があります。

構文
// 基本のif
if 条件式 {
	// 条件が true のとき実行
}

// if-else
if 条件式 {
	// true のとき
} else {
	// false のとき
}

// if-else if-else
if 条件式1 {
	// 条件式1が true のとき
} else if 条件式2 {
	// 条件式2が true のとき
} else {
	// どちらでもないとき
}

// 初期化式付きif(スコープがifブロック内に限定される)
if 初期化式; 条件式 {
	// 初期化式で宣言した変数はここでのみ有効
}
サンプルコード
package main

import (
	"fmt"
	"strconv"
)

func grade(score int) string {
	if score >= 90 {
		return "A"
	} else if score >= 70 {
		return "B"
	} else if score >= 50 {
		return "C"
	} else {
		return "D"
	}
}

func main() {
	fmt.Println(grade(95)) // A
	fmt.Println(grade(72)) // B
	fmt.Println(grade(40)) // D

	// 初期化式付きif(エラー処理の慣用パターン)
	if n, err := strconv.Atoi("42"); err == nil {
		fmt.Printf("変換成功: %d\n", n) // n はここでのみ有効
	} else {
		fmt.Println("変換失敗:", err)
	}

	// 変換失敗の例
	if n, err := strconv.Atoi("abc"); err == nil {
		fmt.Println(n)
	} else {
		fmt.Println("エラー:", err)
	}

	// マップの値取得とif(慣用パターン)
	m := map[string]int{"alice": 100, "bob": 80}
	if score, ok := m["alice"]; ok {
		fmt.Println("alice のスコア:", score)
	}
}
概要

初期化式付きif(『if v, err := f(); err == nil { ... }』)はGoで最もよく使われるパターンの一つです。関数の戻り値を受け取りながら条件を確認でき、変数のスコープをifブロック内に限定できます。

Goでは条件式に丸括弧をつけてもエラーにはなりませんが、gofmt(公式フォーマッタ)により自動的に削除されます。Goのコードスタイルに従い、括弧なしで書きましょう。

Goにはif文の三項演算子(『条件 ? A : B』)がありません。条件に応じた値の代入も通常のif-elseで記述します。switch文を使うとより読みやすい場合もあるため、分岐が多い場合は検討してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。