1. ホーム
  2. スクリプト・コラム
  3. ゴラン

Golangのループステートメントとループ制御ステートメントの説明

2022-01-07 14:24:25

I. ループ文

1. 通常のループ

1)構文

<ブロッククオート

for init; condition; post { }.

  • init(オプション):制御変数に初期値を代入します。
  • condition(オプション): 制御条件(未入力時に等しい) while True ).
  • post(オプション):制御変数のインクリメントまたはデクリメント。

2) 例

1. 1から10までの数の和を求めよ。

package main

import "fmt"

func main() {
	count := 0
	for i := 0; i <= 10; i++ {
		count += i
	}
	fmt.Println("The sum of the numbers 1 to 10 is:",count)
}


実行結果

1から10までの数字の和は 55

2. initとpostの省略:countが10未満のときに自己和算の値を計算する。

package main

import "fmt"

func main() {
	count := 1
	for ; count < 10; {
		count += count
	}
	fmt.Println("count is less than 10 when the self-summing value is:",count)
}


を省略することもできます。 ; NO.

package main

import "fmt"

func main() {
	count := 1
	for count < 10{ // omit semicolon
		count += count
	}
	fmt.Println("The sum of the numbers 1 to 10 is:",count)
}


実行結果

countが10未満の時の自己和算の値は

3. Golangにはwhileループがないので、条件を省略することで実装できます。

package main

import "fmt"

func main() {

	for { // omit condition
		fmt.Println("dead loop")
	}
}


2. ループのネスト

package main

import "fmt"

func main() {

	for { // omit condition
		fmt.Println("dead loop")
	}
}


出力結果

1から10までの数字)×10の和:550

3.範囲ループ

文字列、配列、スライスなどを反復処理し、要素を出力するためのもの。

package main

import "fmt"

func main() {
	strArray := []string{"a", "b","c"} //array of strings
	for i,v := range strArray {
		fmt.Println(fmt.Sprintf("subscript is: %d value is: %s", i,v))
	}
}


出力結果

添え字は 0 値は: a
添え字は 1 値は: b
添え字が 2 の場合 値が c の場合

II. ループ制御文

1. ブレーク・ブレイク(ジャンプアウト)ループ

1)ブレイク(飛び出し)ループ

変数でデッドループを書く a は1を足し続け、aの値が3より大きくなると、ループから飛び出します。

package main

import "fmt"

func main() {
	a := 1
	for {
		a++
		fmt.Printf("The value of a is : %d\n", a)
		if a > 3 {
			/* Use the break statement to jump out of the loop */
			fmt.Printf("Jumped out of loop")
			break
		}
	}
}



出力結果

a の値は : 2
a の値は : 3
a の値は : 4
ループから飛び出す

2) 破りたい(飛び出したい)ループを指定する(ネストしたループで使う)

マーカーを使うことで、飛び出したいループを指定することができます。

次の、マークされていない、通常のブレークは、ループを壊し、現在のレベルのループのみを壊し、常に11の値を表示する外側のレベルでは壊さないようにします。

package main

import "fmt"

func main() {
	for i := 1; i <= 2; i++ {
		fmt.Printf("outer loop i: %d\n", i)
		for j := 11; j <= 12; j++ {
			fmt.Printf("inner loop j: %d\n", j)
			break // Without using the marker, only the layer loop will be broken, not the outer loop
		}
	}
}


出力結果

外周ループ i: 1
内部ループ j: 11
アウターループ i: 2
内部ループ j: 11

以下のマーカーを使用し、外側ループの解除は1回のみの実行でループすることと同等であることを指定する。

package main

import "fmt"

func main() {
re:
	for i := 1; i <= 2; i++ {
		fmt.Printf("outer loop i: %d\n", i)
		for j := 11; j <= 12; j++ {
			fmt.Printf("inner loop j: %d\n", j)
			break re // use the flag to break the outer loop
		}
	}
}


出力結果

外周ループ i: 1
内部ループ j: 11

2.Continue-現在のループをスキップする

continue は、現在のループをスキップして、次のループを実行するループで、ループを中断するものではありません

package main

import "fmt"

func main() {
	for a := 1; a < 5; a++ {
		if a == 3 { //execute continue when a=3 to skip
			continue
		}
		//no print operation when a == 3
		fmt.Printf("The value of a is : %d\n", a)
	}
}


実行結果

a の値は : 1
aの値は2です。
aの値は4です。

ループがネストされている場合、continueでもbreakと同じようにループをスキップする指定ができます

3.goto-conditional転送

gotoは、指定されたコードに直接転送して実行することができます。

次のコードは、a=3のとき、forループからジャンプして、LOOPのある行で直接コードを実行します。

package main

import "fmt"

func main() {
	for a := 1; a < 5; a++ {
		if a == 3 { //a equals 3; execute goto to jump out
			goto LOOP
		}
		//no print operation will be executed when a == 3
		fmt.Printf("The value of a is : %d\n", a)
	}
	LOOP:fmt.Printf("a equals 3; execute goto jump out! ")
}


実行結果

a の値は : 1
aの値は2です。
aは3に等しい。gotoを実行して飛び出せ!

gotoの使用は推奨されませんし、コードの構造を混乱させる傾向があります。

Golangのループ文とループ制御文についてのこの記事は終わりです。goループ文とループ制御文についての詳しい情報は、スクリプトハウスの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。