GoLang基础数据类型-slice(切片)

yinzhengjie · · 1369 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

                   GoLang基础数据类型-slice(切片)

                                                作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

  数组的长度在定义之后无法再次修改;数组是值类型,每次传递都将产生一份副本。显然这种数据结构无法完全满足开发者的真实需求。在初始定义数组时,我们并不知道需要多大的数组,因此我们就需要“动态数组”。在Go里面这种数据结构叫slice,slice并不是真正意义上的动态数组,而是一个引用类型。slice总是指向一个底层array,slice的声明也可以像array一样,只是不需要长度,它是可变长的,可以随时往slice里面加数据。

 

一.什么是切片slice

  简单的说,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针。数组切片的数据结构可以抽象为以下3个变量:   

  1>.一个指向原生数组的指针(point):指向数组中slice指定的开始位置;

  2>.数组切片中的元素个数(len):即slice的长度;

  3>.数组切片已分配的存储空间(cap):也就是slice开始位置到数组的最后位置的长度。

  从底层实现的角度来看,数组切片实际上仍然使用数组来管理元素,基于数组,数组切片添加了一系列管理功能,可以随时动态扩充存放空间,并且可以被随意传递而不会导致所管理的元素被重复复制。

 


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:yinzhengjie

查看原文:GoLang基础数据类型-slice(切片)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1369 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传