Go語言for range(按照鍵值迴圈)遍歷

2021-09-01 00:21:51 字數 2362 閱讀 4312

go 語言可以使用 for range 遍歷陣列、切片、字串、map 及通道(channel)。通過 for range 遍歷的返回值有一定的規律:

陣列、切片、字串返回索引和值。

map 返回鍵和值。

通道(channel)只返回通道內的值。

遍歷陣列、切片——獲得索引和元素

在遍歷**中,key 和 value 分別代表切片的下標及下標對應的值。下面的**展示如何遍歷切片,陣列也是類似的遍歷方法:

for key, value := range int
**輸出如下:

key:0 value:1

key:1 value:2

key:2 value:3

key:3 value:4

遍歷字串——獲得字元

go 語言和其他語言類似,可以通過 for range 的組合,對字串進行遍歷,遍歷時,key 和 value 分別代表字串的索引(base0)和字串中的每乙個字元。

下面這段**展示了如何遍歷字串:

var str = "hello 你好"

for key, value := range str

**輸出如下:

key:0 value:0x68

key:1 value:0x65

key:2 value:0x6c

key:3 value:0x6c

key:4 value:0x6f

key:5 value:0x20

key:6 value:0x4f60

key:9 value:0x597d

**中的 v 變數,實際型別是 rune,實際上就是 int32,以十六進製制列印出來就是字元的編碼。

遍歷map——獲得map的鍵和值

對於 map 型別來說,for range 遍歷時,key 和 value 分別代表 map 的索引鍵 key 和索引對應的值,一般被稱為 map 的鍵值對,因為它們總是一對一對的出現。下面的**演示了如何遍歷 map。

m := map[string]int

for key, value := range m

**輸出如下:

hello 100

world 200

注意對 map 遍歷時,遍歷輸出的鍵值是無序的,如果需要有序的鍵值對輸出,需要對結果進行排序。

遍歷通道(channel)——接收通道資料

for range 可以遍歷通道(channel),但是通道在遍歷時,只輸出乙個值,即管道內的型別對應的資料。

下面**為我們展示了通道的遍歷:

c := make(chan int)

go func() ()

for v := range c

**說明如下:

第 1 行建立了乙個整型型別的通道。

第 3 行啟動了乙個 goroutine,其邏輯的實現體現在第 5~8 行,實現功能是往通道中推送資料 1、2、3,然後結束並關閉通道。

這段 goroutine 在宣告結束後,在第 9 行馬上被並行執行。

從第 11 行開始,使用 for range 對通道 c 進行遍歷,其實就是不斷地從通道中取資料,直到通道被關閉。

在遍歷中選擇希望獲得的變數

在使用 for range 迴圈遍歷某個物件時,一般不會同時需要 key 或者 value,這個時候可以採用一些技巧,讓**變得更簡單。下面將前面的例子修改一下,參考下面的**示例:

m := map[string]int

for _, value := range m

**輸出如下:

100200

在例子中將 key 變成了下畫線,那麼這裡的下畫線就是匿名變數。什麼是匿名變數?

可以理解為一種佔位符。

本身這種變數不會進行空間分配,也不會占用乙個變數的名字。

在 for range 可以對 key 使用匿名變數,也可以對 value 使用匿名變數。

再看乙個匿名變數的例子:

for key, _ := range int
**輸出如下:

key:0

key:1

key:2

key:3

在該例子中,value 被設定為匿名變數,只使用 key,而 key 本身就是切片的索引,所以例子輸出索引。

我們總結一下for的功能:

go 語言的 for 包含初始化語句、條件表示式、結束語句,這 3 個部分均可預設。

for range 支援對陣列、切片、字串、map、通道進行遍歷操作。

在需要時,可以使用匿名變數對 for range 的變數進行選取。

Go語言for range 按照鍵值迴圈 遍歷操作

go 語言可以使用 for range 遍歷陣列 切片 字串 map 及通道 channel 通過 for range 遍歷的返回值有一定的規律 陣列 切片 字串返回索引和值。map 返回鍵和值。通道 channel 只返回通道內的值。遍歷陣列 切片 獲得索引和元素 在遍歷 中,key 和 valu...

go語言坑之for range

songleo 關注 go只提供了一種迴圈方式,即for迴圈,在使用時可以像c那樣使用,也可以通過for range方式遍歷容器型別如陣列 切片和對映。但是在使用for range時,如果使用不當,就會出現一些問題,導致程式執行行為不如預期。比如,下面的示例程式將遍歷乙個切片,並將切片的值當成對映的...

go語言for range 鍵值迴圈

go 語言可以使用 for range 遍歷陣列 切片 字串 map 及通道 channel 通過 for range 遍歷的返回值有一定的規律 for key,value range intgo 語言和其他語言類似,可以通過 for range 的組合,對字串進行遍歷,遍歷時,key 和 valu...