多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
slice和数组的区别:声明数组时,方括号内写明了数组的长度或使用...自动计算长度,而声明slice时,方括号内没有任何字符。 函数一共就两个 一个 ## append ## copy ~~~ var s1 []int //声明切片和声明array一样,只是少了长度,此为空(nil)切片 s2 := []int{} //make([]T, length, capacity) //capacity省略,则和length的值相同 var s3 []int = make([]int, 0) s4 := make([]int, 0, 0) s5 := []int{1, 2, 3} //创建切片并初始化 ~~~ **注意**:make只能创建slice、map和channel,并且返回一个有初始值(非零)。 | 操作 | 含义 | | --- | --- | | **s\[n\]** | 切片s中索引位置为n的项 | | **s\[:\]** | 从切片s的索引位置0到len(s)-1处所获得的切片 | | **s\[low:\]** | 从切片s的索引位置low到len(s)-1处所获得的切片 | | **s\[:high\]** | 从切片s的索引位置0到high处所获得的切片,len=high | | **s\[low:high\]** | 从切片s的索引位置low到high处所获得的切片,len=high-low | | **s\[low:high:max\]** | 从切片s的索引位置low到high处所获得的切片,len=high-low,cap=max-low | | **len(s)** | 切片s的长度,总是<=cap(s) | | **cap(s)** | 切片s的容量,总是>=len(s) | ~~~ package main import "fmt" func main() { s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} s1 := s[2:5] //[2 3 4] s1[2] = 100 //修改切片某个元素改变底层数组 fmt.Println(s1, s) //[2 3 100] [0 1 2 3 100 5 6 7 8 9] s2 := s1[2:6] // 新切片依旧指向原底层数组 [100 5 6 7] s2[3] = 200 fmt.Println(s2) //[100 5 6 200] fmt.Println(s) //[0 1 2 3 100 5 6 200 8 9] } ~~~