展开
  1. array 的定义方式
a := [100]int{}
var b [10]int
c := [...]int{1, 2, 3}
  1. slice 的定义方式
s := make([]int, 100)
var nums []float
  1. 二维数组/切片
var s [][]byte

// 定义了一个 5 行 8 列的数组
picture := make([][]uint8, 5)
for i := range picture {
    picture[i] = make([]uint8, 8)
}
  1. 可以通过 type 定义一个类型
type LinesOfText [][]byte
text := LinesOfText{
    []byte("good"), 
    []byte("gophers"),
}
  1. 整体赋值
// 数组整体赋值是拷贝
a := [1]int{1}
b := a // 此时 a 和 b 不是同一个数组
b[0] = 2 // a = [1], b = [2]

// slice 的整体赋值是指向同一个底层数组
s := []int{1}
t := s
t[0] = 2 // s = [2], t = [2]
  1. 切片操作

起点可以省略,不能像 python 一样用负数。切片底层指向同一块空间。

s := a[1:3]
prefix := str[:len(str)-10]
  1. 完整的切片表达式

代表容量(cap)为 max-low,容量会影响 append 操作的具体实现。字符串不适用。

a[low : high : max]