在golang中,咱们能够像C语言同样建立一个数组,也能够建立一个动态数组(slice)
数组:golang
a := [2]int{1, 2} a[0]=3 a[1]=4
此时咱们建立了一个包含2个元素的数组,[]中只能是常量,由于数组在建立的时候必须是肯定的。
切片:
make数组
经过阅读源码,slice的数据结构是这样的数据结构
type slice struct { array unsafe.Pointer len int cap int }
这是一个典型的结构体,其中第一个字段就是数组,类型是unsafe.Pointer。在此题外话一下,简单介绍下unsafe.Pointer。
此类型和C语言中经常使用的void*有点像,能够经过unsafe.Pointer和其它任意类型的指针相互转换,由于在golang中不一样的类型之间是不能随意转换的,必需要有中间的unsafe.Pointer做为过渡,例如app
var a int = 1 var b *uint64 = (*uint64)((unsafe.Pointer)(&a))
不然就会报错,类型转换失败。好了,到目前为止咱们知道了这个array的类型其实就是一个指针类型,和C语言其实相似。ui
让人迷惑的操做指针