概要
Tour of Go の - For についてのサンプル。
Goのループは、すごくシンプルになっていて for
ループしか存在しません。
while
は無しです。foreach
なループもfor
で書きます。
他の言語と同じ感じの for
ループは
for i := 0; i < len(arr); i++ { xxxx }
みたいな感じです。
foreach
ループは
for i, v := range arr { xxx }
という感じ。
while
ループは
for count < limit {
xxxx
}
という感じ。
無限ループは
for {
xxxx
}
という感じ。
また、Goでは ゴルーチン (Goroutine) を利用する際に、for
と select
を組み合わせてよく利用します。
その場合、無限ループ内でチャネルの応答を待つという形を書くことが多いです。この場合、チャネルからデータが来たのでループを抜けようとすると break
と ラベル
を使ったりします。
// 無限ループ var ( // 2秒後にタイムアウトするチャネル timeout = time.After(2 * time.Second) ) loop: for { select { case <-timeout: break loop } }
サンプル
package tutorial import ( "fmt" "time" ) // ForLoop は、 Tour of Go - For (https://tour.golang.org/flowcontrol/1) の サンプルです。 func ForLoop() error { // ------------------------------------------------------------ // Go言語の for は、 通常の for ループ と foreach ループ の両方を担う. // 書き方は、他の言語とほぼ同様. continue も break も同様. // Go言語には while が存在せず、 for のみで記載する. // ------------------------------------------------------------ var ( arr [10]int ) // for ループ for i := 0; i < len(arr); i++ { arr[i] = i } fmt.Println(arr) // while ループ var ( limit = 10 count = 1 ) for count < limit { count++ } fmt.Println(count, limit) // foreach ループ for i, v := range arr { fmt.Printf("[%d]:%v\t", i, v) } fmt.Println("") // 無限ループ var ( // 2秒後にタイムアウトするチャネル timeout = time.After(2 * time.Second) ) loop: for { select { case <-timeout: break loop } } fmt.Println("break infinite loop") return nil }
try-golang/tutorial_gotour_09_forloop.go at master · devlights/try-golang · GitHub
実行すると以下な感じ。
ENTER EXAMPLE NAME: gotour_for [Name] "tutorial_gotour_forloop" [0 1 2 3 4 5 6 7 8 9] 10 10 [0]:0 [1]:1 [2]:2 [3]:3 [4]:4 [5]:5 [6]:6 [7]:7 [8]:8 [9]:9 break infinite loop
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場