go切片遍历

顺序遍历

对于切片的顺序遍历,一般使用range就可以了。

var nums = []int{10,20,30,40,50}
for i, value := range nums {
    // i为索引
    // value 为切变值
}

这里有一个问题需要注意一下,如果这里的切片nums不是基本数据类型而是结构体。range遍历出来的value值是拷贝值而并非原结构体,修改value中的值不会改变原切片中的值。如果要遍历修改,可以将切片的结构体改为指针,或都索引来取值。

    type Test struct {
        A int
        B string
    }

    t1 := Test{
        A: 1,
        B: "1",
    }

    t2 := Test{
        A: 2,
        B: "2",
    }

    var slice1 []Test
    slice1 = append(slice1, t1)
    slice1 = append(slice1, t2)

    for i := range slice1 {
        value := &slice1[i]
        if value.A == 1 {
            value.A = 11
        }
    }

    var slice2 []*Test
    slice2 = append(slice2, &t1)
    slice2 = append(slice2, &t2)

    for _, value := range slice2 {
        if value.A == 2 {
            value.A = 22
        }
    }

逆序遍历

一般情况下逆序遍历思路就是for size-1到0.

    for i := len(nums) - 1; i >= 0; i-- {
        fmt.Println(nums[i])
    }

二般的也可以使用range来遍历

for i := range nums {
    fmt.Println(nums[len(nums)-i-1])
}
0%