一、数组
数组长度指定之后,不可修改。[...]
会自行推断数组长度。
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)))
四、参考教程
有疑问加站长微信联系(非本文作者)