Go言語におけるif
文は、条件に基づいて異なるコードパスを実行するための基本的な構造です。
この記事では、Goにおけるif
文の使い方とその柔軟性を紹介します。
if文の基本構造
Go言語のif
文は、他の多くのプログラミング言語と同様、条件が真(true
)の場合に特定のコードブロックを実行します。
基本的な構文は以下の通りです。
1
2
3
|
if 条件 {
// 条件が真の時に実行されるコード
}
|
シンプルな例
1
2
3
4
|
x := 5
if x > 0 {
fmt.Println("xは正の数です。")
}
|
この例では、変数x
が0
より大きい場合にメッセージを出力します。
elseとelse ifの使用
else
やelse if
を使って、複数の異なる条件をチェックすることもできます。
1
2
3
4
5
6
7
|
if x > 0 {
fmt.Println("xは正の数です。")
} else if x < 0 {
fmt.Println("xは負の数です。")
} else {
fmt.Println("xは0です。")
}
|
この例では、x
が正、負、または0
であるかに基づいて異なるメッセージを出力します。
初期化ステートメント
Goのif
文では、条件チェックの前に変数の初期化を行うことができます。これはコードを簡潔に保つのに役立ちます。
初期化ステートメントの例
1
2
3
|
if a := 10; a > 0 {
fmt.Println("aは正の数です。")
}
|
この例では、a
を10
に初期化し、その後で条件をチェックしています。
初期化ステートメントのスコープについて
上記の通りGo言語のif
文では、条件チェックの前に変数を初期化することができますが、その変数はif
文のスコープ内の利用に限られます。
この初期化ステートメントで宣言された変数は、if
文のブロック内でのみアクセス可能であり、外部のスコープからはアクセスできません。
これにより、変数のスコープを限定し、プログラムの可読性を高めることができます。
以下のコード例では、if
文の中で変数score
を初期化し、その値に基づいて条件分岐を行っています。
1
2
3
4
5
6
7
8
9
|
// 初期化ステートメントを含むif文
if score := 85; score >= 80 {
fmt.Println("成績は良好です。")
} else {
fmt.Println("さらなる努力が必要です。")
}
// この時点でscoreは使用できない
// fmt.Println(score) // コンパイルエラー: undefined: score
|
この例では、score
変数はif
文の内部でのみ定義されているため、if
文の外部でscore
変数にアクセスしようとするとコンパイルエラーになります。
これは、初期化ステートメントで宣言された変数がそのスコープをif
文内に限定しているためです。
この特性は、一時的なチェックや条件に基づく小さな処理において、変数のスコープを最小限に保ちたい場合に非常に有用です。
また、プログラムの他の部分で同じ名前の変数を使用していても、if
文内で初期化された変数による影響を受けることがないため、名前の衝突を避けることができます。
複数の条件を使用する「&&(AND演算子)、||(OR演算子)、!(NOT演算子)」
以下の例では、二つの変数age
とhasPermission
を用いて、特定の条件下でのアクションを制御しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
age := 20
hasPermission := true
// AND演算子を使用した例
if age >= 18 && hasPermission {
fmt.Println("アクセスが許可されました。")
} else {
fmt.Println("アクセスが拒否されました。")
}
// OR演算子を使用した例
if age < 18 || !hasPermission {
fmt.Println("保護者の同意が必要です。")
} else {
fmt.Println("保護者の同意は必要ありません。")
}
|
この例では、age
変数が18
以上かつhasPermission
変数がtrue
の場合にアクセスを許可しています。
&&
演算子は両方の条件がtrue
である場合にのみtrue
を返します。
次に、age
が18
未満、またはhasPermission
がfalse
の場合に保護者の同意が必要であると出力しています。||
演算子はいずれかの条件がtrue
であればtrue
を返します。
まとめ
Go言語のif
文は、プログラムの流れを条件に基づいて制御するための強力なツールです。
シンプルな条件チェックから複雑な条件分岐まで、Goのif
文は幅広いシナリオに適用できます。
プログラム全体
今回の解説で使用したすべてのコードをのせています。
コピーしてGo Playground
に貼り付ければ実行できますので、実際の動作を確認してみてください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
package main
import "fmt"
func main() {
//シンプルな例
x := 1
if x > 0 {
fmt.Println("xは正の数です。")
}
//elseとelse ifの使用
x = -1
if x > 0 {
fmt.Println("xは正の数です。")
} else if x < 0 {
fmt.Println("xは負の数です。")
} else {
fmt.Println("xは0です。")
}
//初期化ステートメントの例
if a := 10; a > 0 {
fmt.Println("aは正の数です。")
}
// 初期化ステートメントを含むif文
if score := 85; score >= 80 {
fmt.Println("成績は良好です。")
} else {
fmt.Println("さらなる努力が必要です。")
}
// この時点でscoreは使用できない
// fmt.Println(score) // コンパイルエラー: undefined: score
//複数の条件を使用する「&&(AND演算子)、||(OR演算子)、!(NOT演算子)」
age := 20
hasPermission := true
// AND演算子を使用した例
if age >= 18 && hasPermission {
fmt.Println("アクセスが許可されました。")
} else {
fmt.Println("アクセスが拒否されました。")
}
// OR演算子を使用した例
if age < 18 || !hasPermission {
fmt.Println("保護者の同意が必要です。")
} else {
fmt.Println("保護者の同意は必要ありません。")
}
}
|
1
2
3
4
5
6
|
xは正の数です。
xは負の数です。
aは正の数です。
成績は良好です。
アクセスが許可されました。
保護者の同意は必要ありません。
|
実行環境
1
2
|
$ go version
go version go1.22 linux/amd64
|