for 式を使用してデータをループ処理する

完了

もう 1 つの一般的な制御フローはループです。 Go で使用されるループ構造は 1 つだけで、for ループです。 ただし、複数の方法でループを表すことができます。 このパートでは、Go でサポートされるループ パターンについて学習します。

基本の for ループ構文

if ステートメントや switch ステートメントと同様に、for ループ式にもかっこは必要ありません。 ただし、中かっこは必要です。

セミコロン (;) によって、for ループの 3 つのコンポーネントを分離します。

  • 最初の反復の前に実行される初期ステートメント (省略可能)。
  • すべての反復の前に評価される条件式。 この条件が false の場合、ループは停止します。
  • すべての反復の最後に実行される後ステートメント (省略可能)。

ご覧のように、Go の for ループは、C、Java、C# などのプログラミング言語の for ループに似ています。

Go の for ループの最も単純な形式は次のようになります。

func main() {
    sum := 0
    for i := 1; i <= 100; i++ {
        sum += i
    }
    fmt.Println("sum of 1..100 is", sum)
}

Go でループを記述できる他の方法を見てみましょう。

空の前ステートメントと後ステートメント

一部のプログラミング言語では、while キーワードを使用して、条件式だけが必要なループ パターンを記述します。 Go に while キーワードはありません。 しかしながら、代わりに for ループを使用し、Go ではプリステートメントとポストステートメントが任意になるという事実を活用できます。

次のコード スニペットを使用して、前ステートメントと後ステートメントを使用せずに for ループを使用できることを確認します。

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    var num int64
    rand.Seed(time.Now().Unix())
    for num != 5 {
        num = rand.Int63n(15)
        fmt.Println(num)
    }
}

num 変数に 5 とは異なる値が保持されている限り、プログラムからはランダムな数が出力されます。

無限ループと break ステートメント

Go で記述できるもう 1 つのループ パターンは、無限ループです。 この場合、条件式、前ステートメント、または後ステートメントは記述しません。 代わりに、ループから出る方法を記述します。 そうしないと、ロジックいつまでも終了しません。 ロジックがループを終了するようにするには、break キーワードを使用します。

適切な無限ループを記述するには、次のように、for キーワードに続けて中かっこを使用します。

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    var num int32
    sec := time.Now().Unix()
    rand.Seed(sec)

    for {
        fmt.Print("Writing inside the loop...")
        if num = rand.Int31n(10); num == 5 {
            fmt.Println("finish!")
            break
        }
        fmt.Println(num)
    }
}

このコードを実行するたびに、異なる出力が得られます。

continue ステートメント

Go では、continue キーワードを使用して、ループの現在の反復をスキップできます。 たとえば、このキーワードを使用すると、ループを続ける前に検証を実行できます。 または、無限ループを記述していて、リソースが使用可能になるまで待機する必要がある場合に使用します。

この例では、continue キーワードが使用されています。

package main

import "fmt"

func main() {
    sum := 0
    for num := 1; num <= 100; num++ {
        if num%5 == 0 {
            continue
        }
        sum += num
    }
    fmt.Println("The sum of 1 to 100, but excluding numbers divisible by 5, is", sum)
}

この例の for ループでは、1 から 100 まで反復し、各反復で現在の値が合計に加算されます。 5 で割り切れるすべての値は、ループの現在の反復でスキップされ、合計には追加されません。