モジュール 2 · レッスン 4 / 5コース内の 9/50~10 min
モジュールのレッスン (4/5)
慣用的なスイッチ
Go の switch は、C/Java のものよりも人間工学に基づいています。各 case には、
独自の暗黙的ブロック (break を書き込む必要はありません)、グループ化できます
カンマを含む複数の値、および式のない switch は動作します
より読みやすい if/else if チェーンのようなものです。
値をオンにします
Go
giorno := "mar"
switch giorno {
case "lun", "mar", "mer", "gio", "ven":
fmt.Println("feriale")
case "sab", "dom":
fmt.Println("weekend")
default:
fmt.Println("sconosciuto")
}case はカンマで区切られた複数の値を受け入れます。暗黙的な値はありません。
fallthrough: ケースが実行されるとすぐに、スイッチは終了します。
無条件で切り替える
式を省略した場合、スイッチは true を評価し、各 case は
bool 状態。これは、長い if/else if チェーンの慣用的な代替手段です。
Go
switch {
case x < 0:
fmt.Println("negativo")
case x == 0:
fmt.Println("zero")
case x < 10:
fmt.Println("piccolo")
default:
fmt.Println("grande")
}初期化ステートメント
if と同様に、switch も init ステートメントを受け入れます。
Go
switch n := len(s); {
case n == 0:
fmt.Println("vuoto")
case n > 100:
fmt.Println("lungo")
default:
fmt.Println("ok")
}n はスイッチ内にのみ存在します。
明示的な fallthrough
本当に実行を次のケースに分類したい場合は、次のように記述する必要があります。
Go
switch 1 {
case 1:
fmt.Println("uno")
fallthrough
case 2:
fmt.Println("due") // anche questo viene stampato
case 3:
fmt.Println("tre") // questo no
}タイプスイッチ (プレビュー)
インターフェースの動的タイプに基づいて区別できます。 値。これについては、「インターフェイス」モジュールで詳しく説明します。
Go
var i interface{} = "ciao"
switch v := i.(type) {
case int:
fmt.Println("int:", v)
case string:
fmt.Println("string:", v)
default:
fmt.Printf("tipo %T\n", v)
}試してみてください
運動#go.m2.l4.e1
試行回数: 0読み込み中…
g の値のスイッチを使用して、lun/mar/mer/gio/ven の場合は 'feriale'、それ以外の場合は 'weekend' を出力します。
エディターを読み込み中…
ヒントを表示
5 つの平日をカンマで区切って 1 つのケースにグループ化します。
3 回の試行後に解決策が利用可能になります
運動#go.m2.l4.e2
試行回数: 0読み込み中…
条件なしでスイッチを使用すると、x に応じて 'neg'、'zero'、または 'pos' が出力されます。
エディターを読み込み中…
ヒントを表示
「switch」の後には式はなく、「{」だけです。
3 回の試行後に解決策が利用可能になります
Quiz#go.m2.l4.e3
準備完了このプログラムは何を出力しますか?
Go
switch 1 {
case 1:
fmt.Print("a")
case 2:
fmt.Print("b")
}要約
caseは、カンマで区切られた複数の値を受け入れます。- 暗黙的なフォールスルーなし: 各ケースには独自の暗黙的な
breakがあります。 - 式のない
switch { ... }= より読みやすいif/else ifチェーン。 - Init ステートメント:
switch x := f(); { ... }、スコープはブロックに限定されます。 fallthroughは存在しますが、まれです。条件を評価せずに次のケースに入ります。- 動的タイプに基づいて区別するには、スイッチ
v := i.(type)を入力します (インターフェイス モジュール)。