🐕

[Go]繰り返し処理を学ぶ

2022/01/29に公開

エンジニアの皆様、お疲れ様です。
前回は構造体についてまとめました。
https://zenn.dev/marietty/articles/b3e0efd8e92078

今回は普段Goを書くときによく利用する繰り返し処理について
まとめながら書いていこうと思います。
やりたいことにあわせて書き分けていきたいですねー!

go言語の繰り返し処理は for range と for 文のどちらかを利用します。
continue で処理をスキップしたり、 break でループ処理から抜けるようなこともできます。

■ for

i < 5 はifの条件文と同じです、条件がfalseになるまで処理は繰り返されます。

package main

import "fmt"

func main() {
 for i := 0; i < 5; i++ {
    fmt.Println(i)
 }
}

■出力

0
1
2
3
4

先程の処理に条件を追加しました。
iが偶数であればcontinueでスキップし、奇数を出力しました。

package main

import "fmt"

func main() {
	for i := 1; i < 5; i++ {
		if i%2 == 0 {
			continue
		}
		fmt.Println(i)
	}
}

■出力

1
3

先程の処理の条件を変更しました。
iが3であればbreakで処理を終了させます。

package main

import "fmt"

func main() {
	for i := 1; i < 5; i++ {
		if i == 3 {
			break
		}
		fmt.Println(i)
	}
}

■出力

1
2

ここまでは、基本的な使い方です。他の言語と似ているので理解もしやすいかなと思います。

■ for/range

文字列の配列namesを定義し、出力する処理を書きました。
range の後に繰り返したい値を入れます。
繰り返しの回数が必要であれば、 for の後のiを使用します。
今回のように回数を使用しない場合は、アンダーバーにすればよいです。

package main

import "fmt"

func main() {
	names := []string{"A子", "B子", "C子", "D子", "E子"}
	for _, name := range names {
		fmt.Println(name)
	}
}

■出力

A子
B子
C子
D子
E子

■ Goto

実際に業務で書いたことはないのですが下記のような書き方もできます。
https://go.dev/ref/spec#Goto_statements

goto L で L: にあるfmt.Println(i)で出力されます。

package main

import "fmt"

func main() {
	i := 0

L:
	fmt.Println(i)

	if i < 5 {
		i++
		goto L
	}
}

■出力

0
1
2
3
4
5

■ まとめ

繰り返し処理は、for range ・ for 文を利用する。
他の言語と同じようにcontinue/breakやif文を利用して条件を追加することができる。

Discussion