Go言語の if 文
Go 言語の if 文の書き方
if 文を使って条件判定を行うことで、その条件が true の時にのみ実行したいコードブロックを書くことができます。
if 条件A {
// 条件Aが true の時のみ実行される
}
条件が false の場合にのみ実行するコードブロックは else で記述します。
if 条件A {
// 条件Aが true の時のみ実行される
} else {
// 条件Aが false の時のみ実行される
}
次のコード例では現在時刻の UNIX 時間を取得して、それが偶数 (Even) である場合に Even、それ以外 (奇数の時) に Odd と出力しています。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now().Unix()
if t%2 == 0 {
fmt.Println("Even - ", t)
} else {
fmt.Println("Odd - ", t)
}
}
実行例は次の通りです。
go run main.go
Odd - 1622369573
判定する条件が複数ある場合は、任意の数だけ else if 条件 として条件を追加できます。
if 条件A {
// 条件A が true の時のみ実行される
} else if 条件B {
// 条件A が false で条件Bが true 時のみ実行される
} else {
// 条件A、条件B両方が false の時に実行される
}
Go で if-else 文のみをスコープとする変数を利用する方法
Go では、一連の if-else ブロック内のみをスコープとする変数を作成できます。
if キーワードと { の間で宣言した変数のスコープは、それに続く if-else ブロック内のみになります。 そして、その外側で宣言された同名の変数があってもそれとは独立して利用可能です。
例えば、次のコードを見てください。
package main
import (
"fmt"
"time"
)
func main() {
t := 1
fmt.Println("[A]", t)
if t := time.Now().Unix(); t%3 == 0 {
fmt.Println("[0]", t)
} else if t%3 == 1 {
fmt.Println("[1]", t)
} else {
fmt.Println("[2]", t)
}
fmt.Println("[B]", t)
}
8行目からmain関数が始まり、9行目で変数 t を宣言して 1 で初期化しています。
12行目の if の後でも time.Now().Unix() の戻り値を受け取る変数として t を宣言しています。
if の後で宣言した変数は if の条件判定及び if-else ブロック内で使えます。このため if-else 内では12行目で宣言した変数 t が参照されています。9行目で宣言した tの値には影響がありません。
上記のコードを実行すると、次のようになります。
go run main.go
[A] 1
[1] 1622443792
[B] 1
10, 20行目で出力している変数 t の値は 1 ですが、 13, 15, 17行目で出力している変数 t の値は 12行目で宣言した変数の値であることが確認できます。