Go 指南学习笔记五

1.数组:类型[n]T是有n个值的类型为T的数组

var a [10] int

变量a是一个有10个整数的数组。

数组不能改变大小

1
2
3
4
5
6
7
8
9
10
package main
import "fmt"
func main() {
var a [10]string
a[0] = "hello"
a[1] = "world"
fmt.Println(a[0], a[1]) //hello world
fmt.Println(a) // [hello world
}

2.slice(切片),[]T为一个类型为T的slice,len(s)返回切片s的长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
s := []int{2, 3, 5, 7, 11, 13}
fmt.Println("s == ", s)
for i := 0; i < len(s); i++ {
fmt.Printf("s[%d] = %d\n", i, s[i])
}
//输出结果
s == [2 3 5 7 11 13]
s[0] = 2
s[1] = 3
s[2] = 5
s[3] = 7
s[4] = 11
s[5] = 13

3.slice 可以包含任意的类型,包括另一个 slice。

1
2
3
4
5
6
game := [][] string{
[]string{"","",""},
[]string{"","",""},
[]string{"","",""},
}

4.对slice切片

s[lo:hi] // 包含lo元素,不包含hi元素

5.构造slice,slice由make创建,这会分配一个全是零值的数组并返回一个slice并指向这个数组

1
a := make([]int, 5)

可以传递第三个参数来执行容量

1
b := make([]int, 0 , 5) // len(b) = 0, cap(b) = 5

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func printlnSlice(s string, x []int) {
fmt.Printf("%s len=%d, cap=%d %v\n", s, len(x), cap(x), x)
}
func main() {
a := make([]int, 5)
printlnSlice("a", a) // a len=5, cap=5 [0 0 0 0 0]
b := make([]int, 0, 5)
printlnSlice("b", b) // b len=0, cap=5 []
c := b[:2]
printlnSlice("c", c) // c len=2, cap=5 [0 0]
d := c[2:5]
printlnSlice("d", d) //d len=3, cap=3 [0 0 0]
}

6.向slice结尾添加元素,append

1
2
3
4
var a []int
append(a, 0)
append(a, 1)
append(a, 2, 3, 4)

如果slice底层数组的不能分配更多的数组时,会自动分配一个更大的数组,返回的slice指向新的数组。

7.切片是数组之上的抽象数据类型。

初始化不同,切片不需要指定固定长度:var a [10]int//数组var a []int//切片

切片的零值是nil

更多的slice切片:用法与本质

如果您觉得对您有帮助,谢谢您的赞赏!