定义:slice表示一个拥有相同类型元素的可变长度的序列
slice有三个属性:指针,长度,容量
指针指向第一个可以从slice中访问的元素,这个元素并不一定是数组的第一个元素
注意:
1.一个底层数组可以对应多个slice
2.slice超过被引用对象的容量,将会宕机
定义slice:
myslice := []int{1, 2, 3, 4}
slice底层是数组,slice可以引用数组的任何位置:
var myarr [9]int = [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
slicearr1 := myarr[1:4]
slice引用了数组,会随着数组的值改变而变化
myarr[1] = 100 //slicearr1[0]的值是100
slice用法:
slicearr2 := myarr[:5]
slicearr3 := myarr[5:]
slicearr4 := myarr[:]
求长度:
len(slicearr2) //结果5
len(slicearr3) //结果4
求容量:
cap(slicearr2) //结果9
cap(slicearr3) //结果4
对string类型求子串,返回值是string:
str := "hello"
slicestr := str[:3] //类型string
对[]byte类型做slice操作,返回值是[]byte类型:
myBytes := []byte("hello world!") //**注意字符串转化成[]byte是圆括号**
slicemyBytes := myBytes[:5] //类型[]byte
slice比较:
bytes.Equal可比较两个[]byte类型,不可以直接用==比较,唯一用==比较是和nil。
其他类型比较则需要实现。
内置函数make,创建一个指定元素类型,长度和容量的slice,参数容量可省略
myslice2 := make([]int, 5, 10) //make创建一个无名数组并返回了它的一个slice