iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

轉職未滿一年的點點滴滴系列 第 12

[Day 12] -『 GO語言學習筆記』- for range 迴圈

以下筆記摘錄自『 The Go Workshop 』。

Go語言只支援一種迴圈迴圈敘述,就是for迴圈。

Go語言的陣列(Array)及切片(Slice)兩種集合型別很適用for i 的迴圈,因為鍵與值會照順序排列,所以可以使用for i來走訪,如以下:

for <起始賦值敘述>; <條件敘述> ; <結束敘述> {
    <程式區塊>
}

For example,

package main

import "fmt"

func main() {
	names := []string{"Jim", "Jane", "Joe", "June"}
	for i := 0; i < len(names); i++ {
		fmt.Println(names[i])
	}
}

//output
Jim
Jane
Joe
June

但若是映射表(Map)這類的集合型別,鍵與值不會照順序排列,使用for i就不便利,所以必須使用for range迴圈,這相當於一些語言的for each或 for in迴圈,每次從集合取出一組值,走訪後回圈及結束,如下:

for <鍵>, <值> := range <集合> {
    <程式區塊>
}

如果再回圈用不到key或value變數,可以在接收時寫成底線字元_

for _, value := range config {
    fmt.PrintLn(value)
}

如果只想取出鍵,則可以省略第二個變數不寫,這寫法等同於for key, _ := range config

for key := range config {
    fmt.PrintLn(value)
}

range其實也可以用在陣列或切片,在這種情況下key是元素索引,value是元素值。


names := []string{"Jim", "Jane", "Joe", "June"}
	for i, value := range names {
		fmt.Println("Index", i, "=", value)
	}

這樣做跟for i的效果一樣,而且不需要自習計算集合長度,也就是不需要用到len(),程式變得比較簡潔。並且,使用range走訪陣列或切片會保證按照索引順序輸出。

但若要再迴圈中修改原始集合內的元素,就仍得使用name[i],因為value是個在迴圈內建立的獨立變數,與原集合沒有關係。


上一篇
[Day 11] -『 GO語言學習筆記』- switch 敘述
下一篇
[Day 13] -『 GO語言學習筆記』- 核心型別(I)
系列文
轉職未滿一年的點點滴滴30

尚未有邦友留言

立即登入留言