go 語言中range關鍵字用於 for 循環中迭代數組(array)、切片(slice)、通道(channel)或集合(map)的元素。在數組和切片中它返回元素的索引和索引對應的值,在集合中返回 key-value 對。
- range 變量
大多數人都知道在range子句的左邊(在上面的例子中的i)你可以使用以下命令分配循環變量:
-- 賦值(=)
-- 短變量聲明(:=)
你也可以選擇不做任何事情來完全忽略循環變量。
如果使用短變量聲明(:=),Go將為循環的每次迭代重用變量(僅在循環的範圍內)
- range 表達式
在range子句的右側(在下面的示例中array),你可以找到他們稱之為range表達式的內容。它可以包含任何計算結果為以下之一的表達式:
-- array
-- pointer to an array
-- slice
-- string
-- map
-- channels that allow receiving, e.g. chan int or chan
實例 1:
<code>package
mainimport
"fmt"
func
main
()
{ array := [3
]int
{1
,2
,3
} slice := []int
{10
,11
,12
,13
} kvs :=map
[string
]string
{"a"
:"A"
,"b"
:"B"
,"c"
:"C"
}for
i, v :=range
array { fmt.Println(i, v) }for
i, v :=range
slice { fmt.Println(i, v) }for
k, v :=range
kvs { fmt.Println(k, v) } }/<code>
輸出:
<code>0
1
1
2
2
3
*****************
0
10
1
11
2
12
3
13
*****************
a
A
b
B
c
C
/<code>
如果將for range 數組,切片和集合的v去掉,變成如下代碼,range將分別返回對應數組和列表的索引,以及集合的鍵。
實例2:
<code>package
mainimport
"fmt"
func
main
()
{ array := [3
]int
{1
,2
,3
} slice := []int
{10
,11
,12
,13
} kvs :=map
[string
]string
{"a"
:"A"
,"b"
:"B"
,"c"
:"C"
}for
i :=range
array { fmt.Println(i) }for
i :=range
slice { fmt.Println(i) }for
k :=range
kvs { fmt.Println(k) } }/<code>
輸出:
<code>0
1
2
*****************
0
1
2
3
*****************
a
b
c
/<code>