if/else 式を使用して条件をテストする
どのようなプログラミング言語でも、最も基本的な制御フローは if/else
ステートメントです。 Go の if/else
ステートメントは簡単です。 ただし、Go プログラムを苦労なく書くことができるようになるには、いくつかの違いを理解しておく必要があります。
Go での if
ステートメントの構文を見てみましょう。
if ステートメントの構文
他のプログラミング言語とは異なり、Go では "条件をかっこで囲む必要はありません"。 else
句は省略可能です。 ただし、中かっこは必要です。 さらに、行を減らすための三項 if
ステートメントは Go では使用できないため、毎回完全な if
ステートメントを記述する必要があります。
if
ステートメントの基本的な例を次に示します。
package main
import "fmt"
func main() {
x := 27
if x%2 == 0 {
fmt.Println(x, "is even")
}
}
Visual Studio Code で Go の構文を記述していて、条件にかっこを使用すると、かっこはプログラムを保存するときに自動的に削除されます。
複合 if ステートメント
Go では、複合 if
ステートメントがサポートされています。 else if
ステートメントを使用することで、ステートメントを入れ子にできます。 次に例を示します。
package main
import "fmt"
func givemeanumber() int {
return -1
}
func main() {
if num := givemeanumber(); num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has only one digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
このコードでは、givemeanumber()
関数から返された値が num
変数に格納され、その変数は "すべての if
分岐で使用できる" ことに注意してください。 ただし、if
ブロックの外側で num
変数の値を出力しようとすると、次のようなエラーが発生します。
package main
import "fmt"
func somenumber() int {
return -7
}
func main() {
if num := somenumber(); num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
fmt.Println(num)
}
プログラムを実行すると、エラー出力は次のようになります。
# command-line-arguments
./main.go:17:14: undefined: num
Go では、if
ブロック内で変数を宣言するのが自然です。 これは、Go で一般的な規則を使用して効果的にプログラミングする方法です。