xiannv / xiannv.github.io

blog
0 stars 0 forks source link

Golang #7

Open xiannv opened 5 years ago

xiannv commented 5 years ago

Learning doc

《如何避开 Go 中的各种陷阱》

《Go语言标准库》

xiannv commented 5 years ago

在线运行器

数组和切片

创建数组本质是分配一块指定大小的内存(malloc

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

初始化值为0,内置函数len()获取数组长度:

var arr [5]int
arr[4] = 42

更改切片中某些元素的值,实际上是在改变切片指向的数组元素的值

var foo []int
foo = make([]int, 5)
foo[3] = 42
foo[4] = 100
bar  := foo[1:4]
//在原切片的基础上创建一个子切片,然后改变子切片里元素的值
bar[1] = 99
fmt.Println(foo[1:4])
fmt.Println(bar[1])

append 对切片扩容时,如果大小在 1024 字节以内,每次都会以双倍的大小来申请内存,但如果超过了 1024 字节则会使用所谓的 memory size classes 来保证增长的容量不会大于当前容量的 12.5%。

a := make([]int, 32)
b := a[1:16]
a = append(a, 1)
a[2] = 42
fmt.Println(b[2])
fmt.Println(a[2])