Go教程

golang slice 必知必会 未完待续

本文主要是介绍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,如何避免掉坑

让人迷惑的操作

这篇关于golang slice 必知必会 未完待续的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!