欢迎光临
我们一直在努力

golang slice 必知必会 未完待续

数组是什么,slice是什么

在golang中,我们可以像C语言一样创建一个数组,也可以创建一个动态数组(slice)
数组:

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

此时我们创建了一个包含2个元素的数组,[]中只能是常量,因为数组在创建的时候必须是确定的。
切片:
make

slice与数组的关系

通过阅读源码,slice的数据结构是这样的

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

这是一个典型的结构体,其中第一个字段就是数组,类型是unsafe.Pointer。在此题外话一下,简单介绍下unsafe.Pointer。
此类型和C语言中常用的void*有点像,可以通过unsafe.Pointer和其它任意类型的指针相互转换,因为在golang中不同的类型之间是不能随意转换的,必须要有中间的unsafe.Pointer作为过渡,例如

var a int = 1                                                                
var b *uint64 = (*uint64)((unsafe.Pointer)(&a))

否则就会报错,类型转换失败。好了,到目前为止我们知道了这个array的类型其实就是一个指针类型,和C语言其实类似。

从数组中获取slice

理解append,如何避免掉坑

让人迷惑的操作

https://segmentfault.com/a/1190000022107515

赞(0)
未经允许不得转载:ITyet » golang slice 必知必会 未完待续
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址