JavaScriptを有効にしてください

Go言語のif文:初心者向けガイド

 · 

Go言語におけるif文は、条件に基づいて異なるコードパスを実行するための基本的な構造です。
この記事では、Goにおけるif文の使い方とその柔軟性を紹介します。

if文の基本構造

Go言語のif文は、他の多くのプログラミング言語と同様、条件が真(true)の場合に特定のコードブロックを実行します。
基本的な構文は以下の通りです。

1
2
3
if 条件 {
    // 条件が真の時に実行されるコード
}

シンプルな例

1
2
3
4
x := 5
if x > 0 {
    fmt.Println("xは正の数です。")
}

この例では、変数x0より大きい場合にメッセージを出力します。

elseとelse ifの使用

elseelse 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は正の数です。")
}

この例では、a10に初期化し、その後で条件をチェックしています。

初期化ステートメントのスコープについて

上記の通り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演算子)」

以下の例では、二つの変数agehasPermissionを用いて、特定の条件下でのアクションを制御しています。

 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を返します。
次に、age18未満、またはhasPermissionfalseの場合に保護者の同意が必要であると出力しています。||演算子はいずれかの条件が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

スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア