- 切片类似数组的引用。更改底层数组中的元素会修改切片的元素。更改切片的元素同样会修改其底层数组中的元素,和它共享底层数组的切片都会观测到这些修改。
点击查看代码
package mainimport "fmt"func main() {names := [4]string{"John","Paul","George","Ringo",}fmt.Println(names) // [John Paul George Ringo]a := names[0:2]b := names[1:3]fmt.Println(a, b) // [John Paul] [Paul George]names[1] = "gyt"fmt.Println(a, b) // [John gyt] [gyt George]fmt.Println(names) // [John gyt George Ringo]
}
- 切片的长度和容量。切片的长度就是它所包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。对切片进行切片,是对其底层数组再进行切片,换句话说,是对容量而不是长度再进行切片。当切片的左边界设置一个大于0的数时,会改变切片的容量,其他情况容量不会改变。
点击查看代码
package mainimport "fmt"func main() {s := []int{2, 3, 5, 7, 11, 13}printSlice(s) // len=6 cap=6 [2 3 5 7 11 13]s = s[:0]printSlice(s) // len=0 cap=6 []s = s[:4]printSlice(s) // len=4 cap=6 [2 3 5 7]s = s[1:4]printSlice(s) // len=3 cap=5 [3 5 7]s = s[2:]printSlice(s) // len=1 cap=3 [7]}func printSlice(s []int) {fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}