Go 语言入门之数组和切片的使用 | 青训营

82 阅读2分钟

数据结构

数组

  • 数组是定长的
  • 在go语言中,数组使用的并不是很多,一般使用的更多的是切片类型
  • 但是如果是需要一个矩阵的话,你可能更需要一个二维的数组,而不是一个二维的切片

一维数组的声明与初始化

var name [num]type
var q [3]int = [3]int{1, 2, 3}

多维数组的声明与初始化

var name [num1][num2] type
var array = [4][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}}

切片

  • 切片可以改变长度,所以在go中使用的特别频繁
  • 切片可以很灵活的对你的数据进行修改,所以尽量使用切片代替数组

声明

初始化一个切片

var arr = [5]int{1,2,3,4,5}

返回结果分别为[2]和[2 3 4 5]

arr[1:2]    arr[1:]

声明一个切片

var arr = []int

make创建切片 2为分配空间 10为预分配空间(降低多次分配空间造成的性能问题)
提前预分配好空间可以很大程度上优化代码的性能

b := make([]int, 2, 10)

增加元素

追加一个元素

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

追加切片 前面添加切片

a = append(a,[]int{1,2,3}...)   append([]int{0}, a...)

某个位置添加元素

a = append(a[:i],append([]int{1,2,3},a[i:]...)...)

复制元素

将b的前三个元素复制给a

a := []int{1,2,3}
b := []int{4,5,6,7}

copy(a,b)

删除元素

a := []int{1,2,3,4}

删除开头元素

a = a[i:]

删除中间元素

a = append(a[:i],a[j:]...)

删除结尾元素

a = a[:i]

多维切片

  • 二维边长的切片可能不是特别常用
  • 因为一般都是应用于矩阵,此时就需要使用二维数组已经写死的行列数
    声明一个二维切片
var slice [][]int

为二维切片赋值

slice = [][]int{{10}, {100, 200}}