Go 语言切片的内部结构包含地址、大小和容量,切片是真正意义上的动态数组,而且是一个引用类型,切片指向一个底层数组。
var name []T
声明但未使用的切片的默认值是:nil。示例:
func main() {
var strList []string
fmt.Println(strList == nil)
}
从指定范围中生成切片
func main() {
var h [30]int
for i := 0; i < 30; i++ {
h[i] = i + 1
}
fmt.Println(h[10:15])
fmt.Println(h[20:])
fmt.Println(h[:2])
}
使用 make() 函数构造切片,格式如下:
make([]T, size, cap)
示例:
func main() {
a := make([]int, 2)
b := make([]int, 2, 10)
fmt.Println(a, b)
fmt.Println(len(a), len(b))
}
提示:使用 make() 函数生成的切片一定发生了内存分配操作。但给定开始与结束位置的切片只是将新的切片结构指向已经分配好的内存区域,设定开始与结束为止,不会发生内存分配操作。
从数组/切片中切出来的切片容量
func main() {
arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
s1 := arr[2:]
fmt.Println(s1) // [2, 3, 4, 5, 6, 7]
s1[0] = 100
fmt.Println(s1) // [100, 3, 4, 5, 6, 7]
fmt.Println(arr) // [0, 1, 100, 3, 4, 5, 6, 7]
s2 := arr[2:6]
fmt.Println(s2) // [100, 3, 4, 5,]
s3 := s2[3:6]
fmt.Println(s3) //[5,6,7]
s4 := s3[1:]
fmt.Println(s4)
fmt.Printf("len(s2)=%d, cap(s2)=%d\n", len(s2), cap(s2))
}
func main() {
var h [30]int
for i := 0; i < 30; i++ {
h[i] = i + 1
}
fmt.Println(h)
a := h[1:10] // [2 3 4 5 6 7 8 9 10]
fmt.Println(a)
b := a[3:5] // [5 6]
fmt.Println(b)
c := b[2:4]
fmt.Println(c)
fmt.Printf("c -- cap=%d\n", cap(c)) // c -- cap=24
}
原文:https://www.cnblogs.com/Wshile/p/12772601.html