モジュール 2 · レッスン 1 / 5コース内の 6/50~10 min
モジュールのレッスン (1/5)
if、else、および init ステートメント
Go では、if 構文が古典的な構文ですが、2 つの重要な違いがあります。
C/Java と比較: 条件を囲む括弧はありません。
if で一時変数を直接宣言する機能
(init ステートメント)。
基本的な構文
Go
if temperatura > 30 {
fmt.Println("caldo")
} else if temperatura > 20 {
fmt.Println("mite")
} else {
fmt.Println("fresco")
}単一行ブロックの場合でも中括弧は必須です。の
条件は bool タイプである必要があります。Python や JS のような「真実性」はありません。
Go
n := 0
// if n { ... } // ERRORE: int non è bool
if n != 0 { ... } // okInit ステートメント: スコープは if に限定されます
if/else 内でのみ有効な変数を宣言できます。
; を使用して条件から分離します。
Go
if v, err := call(); err == nil {
fmt.Println("ok", v)
} else {
fmt.Println("ko", err)
}
// qui v ed err NON esistono piùこれは、外側のスコープを汚さずにエラーを処理するための慣用的なパターンです。
if スコープでのシャドウイング
外部変数が init によって 「シャドウ化」 された場合、内部では ローカルバージョンが勝った場合。その直後、外側のものが再び現れます。
Go
x := 10
if x := 3; x > 5 {
fmt.Println("dentro:", x) // mai stampato (3 < 5)
} else {
fmt.Println("else:", x) // 3
}
fmt.Println("dopo:", x) // 10 — quella esterna三項演算子はありません
Go には cond ? a : b がありません。条件付き割り当ての場合は、if/else が必要です。
3 ~ 4 行で表示します。これは読みやすさを重視した設計上の選択です。
Go
var label string
if age >= 18 {
label = "adulto"
} else {
label = "minore"
}試してみてください
運動#go.m2.l1.e1
試行回数: 0読み込み中…
n の値に応じて、「positivo」、「zero」、または「negativo」を出力します。
エディターを読み込み中…
ヒントを表示
記号上の条件を含む `if / else if / else` チェーン。
3 回の試行後に解決策が利用可能になります
運動#go.m2.l1.e2
試行回数: 0読み込み中…
init ステートメントを使用して if で v := 42 を宣言し、v >= 18 の場合にのみそれを出力します。
エディターを読み込み中…
ヒントを表示
構文: `if init;条件 { ... }`。
3 回の試行後に解決策が利用可能になります
Quiz#go.m2.l1.e3
準備完了このプログラムは何を出力しますか?
Go
x := 10
if x := 3; x > 5 {
fmt.Println("dentro:", x)
} else {
fmt.Println("else:", x)
}
fmt.Println("dopo:", x)要約
- 括弧のない条件。中括弧は常に必須です。
- 条件は
boolでなければなりません: 暗黙の真実性はありません。 - Init
if v, err := f(); err == nil { ... }は、vおよびerrの範囲を制限します。 - init でのシャドウイング: 外部変数をシャドウしないように注意してください。
- 3 項なし: 拡張された
if/elseを記述します。