6 数组
类型[n]T表示拥有n个T类型的值的数组。
表达式
var a [10]int
将变量声明为拥有10个整数的数组。
数组的长度为其类型的一部分,因此数组无法改变大小。
package main
import "fmt"
func main() {
var a [2]string
a[0] = "iiiii"
a[1] = "jjjjj"
fmt.Println(a[0], a[1])
fmt.Println(a)
ttt := [3]int {1, 2, 3}
fmt.Println(ttt)
}
7 切片
每个数组的大小是固定的,但切片为数组元素提供了动态大小的、灵活的视角。
类型[]T表示一个数组类型为T的切片。
切片通过两个下标来定界,一个上界一个下界,二者以冒号分隔:
a[low: high]
它会选择一个半开区间,包括第一个元素,但是排除最后一个元素。
package main
import "fmt"
func main() {
primes := [6]int{2, 3, 5, 7, 11, 13}
s := primes[1:4]
fmt.Println(s)
}
8 切片类似于数组的引用
切片不存储任何数据,只描述了底层数组中的一段。
更改切片中的元素会修改其底层数组中对应的元素。
与其共享底层数组的切片都会观测到这些修改。
package main
import "fmt"
func main() {
names := [4]string{
"John",
"Paul",
"George",
"Ringo",
}
fmt.Println(names)
a := names[0: 2]
b := names[1: 3]
fmt.Println(a, b)
b[0] = "XXX"
fmt.Println(a, b)
fmt.Println(names)
}
9 切片文法
切片文法类似于没有长度的数组文法。
# 数组文法
[3]bool{true, ture, false}
# 创建一个数组,并以此建立一个切片
[]bool{true, true, false}
package main
import "fmt"
func main() {
bbb := []bool{false, true, false, true, false}
iii := []int{1, 2, 3, 4, 5, 6}
sss := []struct{
x int
y int
} {{1, 2}, {3, 4}}
fmt.Println(bbb)
fmt.Println(iii)
fmt.Println(sss)
}