Go語言 range關鍵字循環迭代切片


  Go語言有個特殊的關鍵字 range,它可以配合關鍵字 for 來迭代切片里的每一個元素。當迭代切片時,關鍵字 range 會返回兩個值,第一個值是當前迭代到的索引位置,第二個值是該位置對應元素值的一份副本,如下圖所示

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

    // 創建一個整型切片,並賦值
    slice := []int{10, 20, 30}
    // 迭代每一個元素,並顯示其值
    for k, v := range slice {
        fmt.Printf("index:%d value:%d value-addr:%X elemm-addr:%X \n", k, v, &v, &slice[k])
    }

輸出結果為:

index:0 value:10 value-addr:C00000A0B0 elemm-addr:C000010340
index:1 value:20 value-addr:C00000A0B0 elemm-addr:C000010348
index:2 value:30 value-addr:C00000A0B0 elemm-addr:C000010350

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

  當然,range 關鍵字不僅僅可以用來遍歷切片,它還可以用來遍歷數組、字符串、map 或者通道等。

 

package main

import "fmt"

func main() {
    // 創建一個整型切片,並賦值
    slice := []int{10, 20, 30}
    // 迭代每一個元素,並顯示其值
    for k, v := range slice {
        fmt.Printf("index:%d value:%d value-addr:%X elemm-addr:%X \n", k, v, &v, &slice[k])
    }
    fmt.Println("\n使用空白標識符(下划線)來忽略索引值")
    //使用空白標識符(下划線)來忽略索引值
    for _, v := range slice {
        fmt.Printf(" value:%d   \n", v)
    }
    fmt.Println("\n使用傳統的 for 循環對切片進行迭代")
    //使用傳統的 for 循環對切片進行迭代
    for i := 0; i < len(slice); i++ {
        fmt.Printf(" value:%d   \n", slice[i])
    }
}

 

  執行結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM