日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GO教程:Go語言range關(guān)鍵字:循環(huán)迭代切片

通過前面的學(xué)習(xí)我們了解到切片其實就是多個相同類型元素的連續(xù)集合,既然切片是一個集合,那么我們就可以迭代其中的元素,Go語言有個特殊的關(guān)鍵字 range,它可以配合關(guān)鍵字 for 來迭代切片里的每一個元素,如下所示:

創(chuàng)新互聯(lián)成立于2013年,我們提供高端重慶網(wǎng)站建設(shè)公司、網(wǎng)站制作公司、成都網(wǎng)站設(shè)計、網(wǎng)站定制、網(wǎng)絡(luò)營銷推廣小程序設(shè)計、微信公眾號開發(fā)、網(wǎng)站推廣服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計、程序開發(fā)來完成項目落地,為會所設(shè)計企業(yè)提供源源不斷的流量和訂單咨詢。

// 創(chuàng)建一個整型切片,并賦值
slice := []int{10, 20, 30, 40}
// 迭代每一個元素,并顯示其值
for index, value := range slice {
    fmt.Printf("Index: %d Value: %d\n", index, value)
}

第 4 行中的 index 和 value 分別用來接收 range 關(guān)鍵字返回的切片中每個元素的索引和值,這里的 index 和 value 不是固定的,讀者也可以定義成其它的名字。

關(guān)于 for 的詳細(xì)使用我們將在下一章《 Go語言流程控制》中為大家詳細(xì)介紹。

上面代碼的輸出結(jié)果為:

Index: 0 Value: 10
Index: 1 Value: 20
Index: 2 Value: 30
Index: 3 Value: 40

當(dāng)?shù)衅瑫r,關(guān)鍵字 range 會返回兩個值,第一個值是當(dāng)前迭代到的索引位置,第二個值是該位置對應(yīng)元素值的一份副本,如下圖所示。



圖:使用 range 迭代切片會創(chuàng)建每個元素的副本

需要強調(diào)的是,range 返回的是每個元素的副本,而不是直接返回對該元素的引用,如下所示。

【示例 1】range 提供了每個元素的副本

// 創(chuàng)建一個整型切片,并賦值
slice := []int{10, 20, 30, 40}
// 迭代每個元素,并顯示值和地址
for index, value := range slice {
    fmt.Printf("Value: %d Value-Addr: %X ElemAddr: %X\n", value, &value, &slice[index])
}

輸出結(jié)果為:

Value: 10 Value-Addr: 10500168 ElemAddr: 1052E100
Value: 20 Value-Addr: 10500168 ElemAddr: 1052E104
Value: 30 Value-Addr: 10500168 ElemAddr: 1052E108
Value: 40 Value-Addr: 10500168 ElemAddr: 1052E10C

因為迭代返回的變量是一個在迭代過程中根據(jù)切片依次賦值的新變量,所以 value 的地址總是相同的,要想獲取每個元素的地址,需要使用切片變量和索引值(例如上面代碼中的 &slice[index])。

如果不需要索引值,也可以使用下劃線
_來忽略這個值,代碼如下所示。

【示例 2】使用空白標(biāo)識符(下劃線)來忽略索引值

// 創(chuàng)建一個整型切片,并賦值
slice := []int{10, 20, 30, 40}
// 迭代每個元素,并顯示其值
for _, value := range slice {
    fmt.Printf("Value: %d\n", value)
}

輸出結(jié)果為:

Value: 10
Value: 20
Value: 30
Value: 40

關(guān)鍵字 range 總是會從切片頭部開始迭代。如果想對迭代做更多的控制,則可以使用傳統(tǒng)的 for 循環(huán),代碼如下所示。

【示例 3】使用傳統(tǒng)的 for 循環(huán)對切片進(jìn)行迭代

// 創(chuàng)建一個整型切片,并賦值
slice := []int{10, 20, 30, 40}
// 從第三個元素開始迭代每個元素
for index := 2; index < len(slice); index++ {
    fmt.Printf("Index: %d Value: %d\n", index, slice[index])
}

輸出結(jié)果為:

Index: 2 Value: 30
Index: 3 Value: 40

在前面幾節(jié)的學(xué)習(xí)中我們了解了兩個特殊的內(nèi)置函數(shù) len() 和 cap(),可以用于處理數(shù)組、切片和通道,對于切片,函數(shù) len() 可以返回切片的長度,函數(shù) cap() 可以返回切片的容量,在上面的示例中,使用到了函數(shù) len() 來控制循環(huán)迭代的次數(shù)。

當(dāng)然,range 關(guān)鍵字不僅僅可以用來遍歷切片,它還可以用來遍歷數(shù)組、字符串、map 或者通道等,這些我們將在后面的學(xué)習(xí)中詳細(xì)介紹。


新聞標(biāo)題:創(chuàng)新互聯(lián)GO教程:Go語言range關(guān)鍵字:循環(huán)迭代切片
網(wǎng)頁地址:http://m.5511xx.com/article/ccchioc.html