// 切片也是一种数据结构,它和数组非常相似,因为他是围绕动态数组的概念设计的,可以按需自动改变大小,使用这种结构,可以更方便的管理和使用数据集合。
// 切片对象非常小,因为只有3个字段的数据结构:一个是指向底层数组的指针,一个是切片的长度,一个是切片的容量。
package main
import "fmt"
func main() {
// make创建切片,make([]type, length)
slice := make([]int, 5)
fmt.Println(slice)
// 指定值
slice1 := []int{1, 2, 3, 4, 5}
fmt.Println(slice1)
// 指定固定索引的值
slice2 := []int{3:9}
fmt.Println(slice2)
// nil切片
var nilSlice []int
fmt.Println(nilSlice)
// 空切片
emptySlice := []int{}
fmt.Println(emptySlice)
// 切片操作
slice3 := slice1[1:3]
fmt.Println(slice3)
// append添加元素,原切片的容量足够时,不会创建新的切片,直接在原切片上修改
// slice4和newSlice共用底层数组
slice4 := []int{1, 2, 3, 4, 5}
newSlice := slice4[1:3]
newSlice = append(newSlice, 5)
fmt.Println(newSlice, slice4) // [2 3 5] [1 2 3 5 5]
// 切片的底层数组,没有足够的容量时,就会新建一个底层数组,把原来数组的值复制到新底层数组里,再追加新值,这时候就不会影响原来的底层数组了
slice5 := []int{1, 2, 3}
slice6 := append(slice5, 6, 7, 8)
fmt.Println(slice5, slice6) //[1 2 3] [1 2 3 6 7 8]
// 追加整个切片使用...
slice7 := append(slice5, slice6...)
fmt.Println(slice7) // [1 2 3 1 2 3 6 7 8]
}
// 取值方法和数组一样,也是通过索引,超过长度会报错
网友评论