for迴圈是最常用來重複執行某段邏輯的敘述之一。在 Go 中,它由for關鍵字、標頭,以及一個用大括號包住迴圈主體的程式區塊組成。標頭則由 3 個以分號;分隔的部分組成:init、condition 和 post。
for init; condition; post {
// loop body - code that is executed repeatedly as long as the condition is true
}
注意: 與其他語言不同,標頭的三個部分外面並沒有用小括號()包住。事實上,加上這樣的小括號會造成編譯錯誤。不過,包住迴圈主體的大括號{ }則一律不可省略。
for迴圈:範例init 部分通常會設定一個計數器變數,condition 部分則檢查迴圈應該繼續還是停止,而 post 部分通常會在每次重複結束時把計數器加一。
for i := 1; i < 10; i++ {
fmt.Println(i)
}
這個迴圈會印出從1到9的數字(包含9)。
定義步進通常會使用遞增或遞減敘述,如上例所示。
你是一位熱衷的賞鳥者,會記錄有多少鳥類造訪你的花園。 通常你會在筆記本上以記數的方式計算鳥類數量,但為了更方便處理資料,你已經將過去幾週的鳥類數量數位化。
我們先從整體的角度來分析資料。 找出你開始記錄以來總共數到了多少鳥類。
實作一個函式TotalBirdCount,它接受一個包含每日鳥類數量的int切片。
它應該回傳你總共數到的鳥類數量。
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34
現在你對鳥類數量數據有了大致了解,你想要做更精細的分析。
實作一個函式BirdsInWeek,它接受一個每日鳥類數量的切片和一個週數。
它會回傳你在該特定一週內總共數到的鳥類數量。 你可以假設每一週的記錄都是完整的。
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12
你發現,一直以來當你試著記錄鳥類時,有一隻鳥躲在花園遠處的角落。
你推斷出這隻鳥每隔一天都會待在你的花園裡。
你不知道牠在那些日子之間確切在哪裡,但可以肯定不在你的花園裡。
你的賞鳥者直覺也告訴你,這隻鳥在你清單中記錄的第一天就在你的花園裡。
根據這項新資訊,撰寫一個函式FixBirdCountLog,它接受一個每日鳥類數量的切片作為引數,並在修正計數錯誤後回傳該切片。
birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]