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

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

新聞中心

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

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

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

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

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

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

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

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

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



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

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

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

// 創(chuàng)建一個(gè)整型切片,并賦值
slice := []int{10, 20, 30, 40}
// 迭代每個(gè)元素,并顯示值和地址
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

因?yàn)榈祷氐淖兞渴且粋€(gè)在迭代過(guò)程中根據(jù)切片依次賦值的新變量,所以 value 的地址總是相同的,要想獲取每個(gè)元素的地址,需要使用切片變量和索引值(例如上面代碼中的 &slice[index])。

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

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

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

輸出結(jié)果為:

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

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

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

// 創(chuàng)建一個(gè)整型切片,并賦值
slice := []int{10, 20, 30, 40}
// 從第三個(gè)元素開(kāi)始迭代每個(gè)元素
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í)中我們了解了兩個(gè)特殊的內(nèi)置函數(shù) len() 和 cap(),可以用于處理數(shù)組、切片和通道,對(duì)于切片,函數(shù) len() 可以返回切片的長(zhǎng)度,函數(shù) cap() 可以返回切片的容量,在上面的示例中,使用到了函數(shù) len() 來(lái)控制循環(huán)迭代的次數(shù)。

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


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