一、数组

数组长度指定之后,不可修改。[...] 会自行推断数组长度。

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

指定索引值来初始化数组。

arr := [...]int{0: 1, 1: 10, 2: 20, 5: 50}

输出:

[1 20 20 0 0 50]

基本数据类型和数组都是值类型,& 是引用类型。

二、切片

Golang 中申明切片之后,切片默认值就是 nil

len() 取长度,cap() 求切片的容量。

定义切片的时候,把数组长度去掉。

var arr []int

make() 创建一个切片,Golang 不能通过下标的方式给切片扩容,需要使用 append() 扩容。

append() 可以合并切片。

sliceA = append(sliceA, sliceB...)  //把 sliceB 合并到 sliceA 并赋值给 sliceA

扩容策略

  • 如果新申请的容量大于两倍的旧容量,最终容量就是新申请的容量。
  • 当需要的容量超过原容量的两倍时,会使用需要的容量作为新容量。
  • 当原切片长度小于 1024 时,新切片的容量会直接翻倍。而当原切片的容量大于等于 1024 时,会反复地增加 25%,直到新容量超过所需要的容量。
  • 如果最终容量计算值溢出,则最终容量就是新申请的容量。

copy() 函数

值类型,改变变量副本值不会影响变量本身的值。(数组、基本数据类型)

引用数据类型,改变变量副本值会影响变量本身的值。(切片)

copy(sliceB, sliceA)

Golang 没有删除切片元素的专用方法,可以使用切片本身特性删除元素。

a = append(a[:2], a[3:]...)

三、切片排序算法

sort 包排序

// 升序
sort.Ints(intList)
sort.Float64s(float8List)
sort.Strings(stringList)

// 降序
sort.Sort(sort.Reverse(sort.IntSlice(intList)))
sort.Sort(sort.Reverse(sort.Float64Slice(float8List)))
sort.Sort(sort.Reverse(sort.StringSlice(stringList)))

四、参考教程

Golang 教程 P17-P21