多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
># make([]int, 5) 和 make([]int, 0, 5) 区别 ``` package main import "fmt" func main() { s1 := make([]int, 5) s2 := make([]int, 0, 5) fmt.Println(s1) fmt.Println(s2) fmt.Println(s1[0]) fmt.Println(s2[0]) //报错 index out of range [0] with length 0 s3 := []int{1, 2} copy(s1, s3) copy(s2, s3) fmt.Println(s1) fmt.Println(s2) } ``` > # 例子二 ~~~ package main import "fmt" func main() { s1 := make([]int, 5) s2 := make([]int, 0, 5) fmt.Println(s1) fmt.Println(s2) s1 = append(s1, 1) s2 = append(s2, 1) fmt.Println(s1, len(s1), cap(s1)) fmt.Println(s2, len(s2), cap(s2)) } ~~~ > # 例子三 - **访问**切片元素时,索引必须在 `0` 到 `len-1` 之间,否则会报错。 - **切片操作** `s1[low:high]` 只要 `high` 不超过切片的容量 (`cap`),而且 `low` 和 `high` 是有效范围内的索引(`0 <= low <= high <= cap`),则不会报错。 ~~~ package main import "fmt" func main() { s1 := make([]int, 0, 10) fmt.Println(s1, len(s1), cap(s1)) // # [] 0 10 s2 := s1[2:5] //浅拷贝 fmt.Println(s2, len(s2), cap(s2)) // [0 0 0] 3 8 长度为区间长度, 容量为开始到最大容量的值 for i := 0; i < 10; i++ { s1 = append(s1, i+1) } fmt.Println(s1) fmt.Println(s2) } ~~~ > # 例子四 ~~~ package main import "fmt" func main() { s1 := make([]int, 0, 10) s2 := make([]int, 10, 10) fmt.Println(s1) fmt.Println(s2) //fmt.Println(s1[0]) //会报错 fmt.Println(s1[0:8]) //不会报错 fmt.Println(s2[0]) fmt.Println(s2[0:8]) } ~~~