1.数组大小是不可变的
arr := [4]int{1,2,3,4}
fmt.Println("arr len is", len(arr)) // arr len is 4
// 查看数组arr的容量
fmt.Println("arr cap is", cap(arr)) // arr cap is 4
通过len和cap的值可以看出,数组是不可变的
2.切片是数组的引用
package main
import "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]
b[0] = "XXX"
fmt.Println(a, b) // [John XXX] [XXX George]
fmt.Println(names) // [John XXX George Ringo]
}
更改切片的元素会修改其底层数组中对应的元素;
与它共享底层数组的切片也会被修改。
3.make创建切片
package main
import "fmt"
func main() {
a := make([]int, 5)
printSlice("a", a) // a len=5 cap=5 [0 0 0 0 0]
b := make([]int, 0, 5)
printSlice("b", b) // b len=0 cap=5 []
c := b[:2]
printSlice("c", c) // c len=2 cap=5 [0 0]
d := c[2:5]
printSlice("d", d) // d len=3 cap=3 [0 0 0]
}
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n",
s, len(x), cap(x), x)
}