for文による繰り返し処理
forのあとに「繰り返しで使う変数の初期化」と「繰り返しを続ける条件」、「繰り返すたびに実行する処理の処理」を;で区切って書く。
以下のコードでは、まず変数iを0で初期化し次に「変数iが10より小さい間」を繰り返しの条件とし、そのあとに「i++」と記載している。これは繰り返すたびにiに1ずつ足していくという意味
for i := 0; i < 10; i++{
fmt.Println(i)
}
\\
0
1
2
3
4
5
6
7
8
9
と出力される。
continue文で次の繰り返しに進む処理をつくる
continueは、処理の途中で次の繰り返し処理に進むときに使う。例えば、先ほどのfor文の中で、iが3のときに「continue」と表示する処理を書きたいときは以下のように記載する。
for i := 0; i < 10; i++{
if i == 3{
fmt.Println("continue")
continue //continue文を書く
}
fmt.Println(i)
}
\\
0
1
2
continue
4
5
6
7
8
9
と出力される。
break文で繰り返しを途中で抜ける
繰り返しを中断してfor文から抜けたいときはbreak文を用いる。
上記のfor文の中でiが5よりも大きいときに繰り返し処理を抜ける、というふうにしたい場合は以下のように記載する。
for i:= 0; i < 10; i++{
if i == 3 {
fmt.Prinln("continue")
continue
}
if i > 5 {
fmt.Println("break")
break //break文を書く
}
fmt.Prinln(i)
}
\\
0
1
2
continue
4
5
break
と出力される。
breakが表示されたあとはfor文のループから抜けているのでそのあとの繰り返し処理が実行されることはない。
for文の省略記法
for文の「変数の初期化」と「繰り返すたびに実行する処理」は省略が可能。
sum := 1 //変数の初期化
for sum < 10 ;{
sum += sum //繰り返し時の処理
fmt.Println(sum)
}
fmt.Println(sum)
//
2
4
6
8
16
16
と表示される
上記のように、変数の初期化をfor文の前で、繰り返し時の処理をfor文の中に書くことで省略記法を行える。
rangeの使い方
for文と一緒に使うことができ、便利な文法としてrangeがある。
「python」「go」「java」という文字列を要素にもつスライスを変数lに入れて、for文で文字列の中身を取り出していく処理を考える
l := []string{"python","go","java"}
for i:= 0; i<lemn(l); i++ {
fmt.Println(i, l[i])
}
//
0 python
1 go
2 java
と出力される
上記の処理はrangeを使用するともっと楽に書くことができる。forのあとに「i, v := range l」と書くと変数iとvにそれぞれlのインデックス番号と中身を代入することができる。
l := []string{"python","go","java"}
for i, v := range l {
fmt.Println(i, v)
}
//
0 python
1 go
2 java
と出力される
for文の中でインデックス番号を処理に使わないときはiを_に置き換えると、スライスの値だけを取り出すことができる。
l := []string{"python","go","java"}
for _, v := range l {
fmt.Println(i, v)
}
//
python
go
java
と出力される
次のようにマップのキーと値をrangeで取り出すこともできる。
m := map[string]int{"apple":100,"banana":200}
for k,v := range m{
fmt.Println(k,v)
}
//
apple 100
banana 200
と出力される
マップのキーだけを取り出したいときは二個目の引数を記載しない。
m := map[string]int{"apple":100,"banana":200}
for k,v := range m{
fmt.Println(k)
}
//
apple
banana
と出力される
バリューだけ出力したい場合は、kを_にしてvだけ出力させるように指定する。
m := map[string]int{"apple":100,"banana":200}
for _,v := range m{
fmt.Println(v)
}
//
100
200
と出力される
rangeはスライスや、マップを扱う時にとても便利。
学習に使用した教材
・『入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)』M.A EduTech
https://www.udemy.com/course/golang-webgosql/?utm_medium=udemyads&utm_source=bene-msa&utm_campaign=responsive&utm_content=top-1&utm_term=general&msclkid=81e2f24a32cc185d275d953d60760226&couponCode=NEWYEARCAREERJP
・『シリコンバレー一流プログラマーが教える Goプロフェッショナル大全』酒井 潤 (著)
https://www.amazon.co.jp/%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%90%E3%83%AC%E3%83%BC%E4%B8%80%E6%B5%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B-Go%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E5%A4%A7%E5%85%A8-%E9%85%92%E4%BA%95-%E6%BD%A4/dp/4046070897