8、go的切片

切片的理解

func main() {
	// 切片是构建在数组之上

	// 定义数组
	var intarr [6]int = [6]int{1, 4, 7, 3, 6, 9}
	// 定义切片,从下标1位置截取到下标2的位置,不包含下标3的位置
	slice := intarr[1:3]

	fmt.Println("intarr:", intarr) // intarr: [1 4 7 3 6 9]
	fmt.Println(slice)             // [4 7]
	// 切片的容量是动态变化的
	fmt.Println("slice的容量:", cap(slice)) // slice的容量: 5
}

image

定义切片

func main() {
	// 定义切片: make()函数的三个参数:1、切片类型, 2、切片长度, 3、切片容量
	slice := make([]int, 4, 20)
	fmt.Println(slice)                // [0 0 0 0]
	fmt.Println("切片的长度:", len(slice)) // 切片的长度: 4
	fmt.Println("切片的容量:", cap(slice)) // 切片的容量: 20
}

切片的遍历

和数组一样的

func main() {
	slice := make([]int, 4, 20)
	slice[0] = 66
	slice[1] = 88
	slice[2] = 99
	slice[3] = 100

	// 方式1: 普通for循环
	for i := 0; i < len(slice); i++ {
		fmt.Printf("slice[%v] = %v \t", i, slice[i])
		// 打印:slice[0] = 66 	slice[1] = 88 	slice[2] = 99 	slice[3] = 100
	}
	fmt.Println()
	// 方式2: for-range循环
	for i, v := range slice {
		fmt.Printf("下标: %v, 元素: %v \n", i, v)
	}
	// 打印:
	//下标: 0, 元素: 66
	//下标: 1, 元素: 88
	//下标: 2, 元素: 99
	//下标: 3, 元素: 100
}

切片的注意点

func main() {
	var intarr [6]int = [6]int{1, 4, 7, 3, 6, 9}
	// 定义切片
	var slice []int = intarr[1:4]
	fmt.Println(len(slice)) // 3

	fmt.Println(slice) // [4 7 3]
	slice = append(slice, 88, 50)
	fmt.Println(slice) // [4 7 3 88 50]

	// 另一种追加方式
	slice3 := []int{99, 44}
	slice = append(slice, slice3...)
	fmt.Println(slice) // [4 7 3 88 50 99 44]

	var a []int = []int{1, 4, 7, 3, 6, 9}
	var b []int = make([]int, 10)
	copy(b, a)     // 把a中对应的数组的元素复制到b中
	fmt.Println(b) // [1 4 7 3 6 9 0 0 0 0]
}
posted @ 2022-11-25 15:59  aBiu--  阅读(11)  评论(0编辑  收藏  举报