Golang面试宝典——Go语言切片知识点

关于Golang面试宝典

最近几年,Go的热度持续飙升,国内外很多大公司都在大规模的使用Go。Google是Go语言诞生的地方,其他公司如Facebook、腾讯、阿里、字节跳动、百度、京东、小米等都在拥抱和转向Go。Go语言的开源项目也非常多,如kubernetes、docker、etcd。

随着市场对Go语言人才需求的增长,很多开发者都投入了Go语言的怀抱。本系列文章将以第一视角与大家一同开始Golang的面试之路,希望大家能够有所收获,拿下心仪的offer。

Go语言切片知识点总结

什么是切片

Go语言中,切片可以这样理解:

type slice struct {
    array unsafe.Pointer
    len int
    cap int
}

array为数组的指针,len为数组的长度,cap为数组的容量。

当我们使用append方法追加元素到预留的内存空间时,len会相应加1。如果预留空间已经用完,则会申请一块更大的内存空间,在cap < 1024之前,每次扩容都是之前的2倍,当大于1024后,扩容系数则在2-1.25之前。

Golang面试宝典——Go语言切片知识点_第1张图片

append操作

arr := make([]int, 3, 5)
brr := append(arr, 2)

如上例所示,arr为原始切片,brr为arr插入一个新元素后的切片,此时,arr和brr是共享底层数组的,但是他们的len不同。

截取子切片

arr := make([]int, 3, 5)
brr := arr[1:3]

如上例所示,arr为原始切片,brr为arr的子切片,修改brr中的元素会反映在arr中,但是当子切片执行append操作,耗完了arr预留的内存空间后,子切片和母切片就会内存分离, 此后两个切片没有任何关系。

修改切片中的值

例:

arr := make([]int, 3)
// arr = [0, 0, 0]

for index, value := range arr {
    arr[index] = value + index
}
// arr = [0, 1, 2]

你可能感兴趣的:(golang,面试,golang,职场和发展)