数组与切片
# 1.数组
var a1 [3]int = [3]int{1, 3, 5}
var a2 [3]int = [3]int{8}
var a3 = [3]int{0: 8, 2: 9}
var a4 [3]int
fmt.Println(a1, a2, a3, a4)
[1 3 5] [8 0 0] [8 0 9] [0 0 0]
arr := [...]int{1, 3, 5}
// 传统for循环遍历
for i := 0; i < len(arr); i++ {
fmt.Println(i, arr[i])
}
0 1
1 3
2 5
// for...range循环遍历
for i, v := range arr {
fmt.Println(i, v)
}
0 1
1 3
2 5
# 2.切片
- 在实际开发中我们可能事先不能确定数组的长度, 为了解决这类问题 Go 语言中推出了一种新的数据类型切片。
- 切片可以简单的理解为长度可以变化的数组, 但是 Go 语言中的切片本质上是一个结构体。
type slice struct {
arrary unsafe.Pointer // 指向数组首元素的指针
len int // 切片长度
cap int // 切片容量
}
切片的使用
sce := make([]int, 3, 5)
sce = append(sce, 1, 2, 3, 4, 5, 6)
fmt.Println(sce)
//首部添加元素, ... 可变参数
sce = append([]int{110, 120}, sce...)
fmt.Println(sce)
//中间添加元素
sce = append(sce[:2], append([]int{123, 456}, sce[2:]...)...)
fmt.Println(sce)
//copy(目标切片, 源切片),
sce1 := make([]int, 10)
copy(sce1, sce)
fmt.Println(sce1)
//删除 3 个 0
sce = append(sce[:4], sce[7:]...)
fmt.Println(sce)
[0 0 0 1 2 3 4 5 6]
[110 120 0 0 0 1 2 3 4 5 6]
[110 120 123 456 0 0 0 1 2 3 4 5 6]
[110 120 123 456 0 0 0 1 2 3]
[110 120 123 456 1 2 3 4 5 6]
关于 Go 切片,看这篇就够了 (opens new window)
切片的注意点
7. golang 之切片的使用注意事项和细节讨论_风落不归处的博客-CSDN 博客 (opens new window)