golang slice 必知必会 未完待续

数组是什么,slice是什么

在golang中,咱们能够像C语言同样建立一个数组,也能够建立一个动态数组(slice)
数组:golang

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做为过渡,例如app

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

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

从数组中获取slice

理解append,如何避免掉坑

让人迷惑的操做指针

相关文章
相关标签/搜索