顺序遍历

对于切片的顺序遍历,一般使用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])
}