golang 数组切片(一)

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

Array与Slice
1、array 静态数组 [len]type,数组类型包括数组长度与元素的数据类型,数据类型完全相同后才可赋值
声明 var array [5]byte //声明时自动将默认初始化为各自类型对应的零值
声明初始化 array := [5]byte{1,2,3,4,5} //长度为5的字节数组
声明初始化 array := […]byte{1,2,3,4,5}//go编译器将根据元素推导出长度 5

2、Slice 动态数组
slice 是对底层数组的抽象和控制。它包含 Go 需要对底层数组管理的三种元数据,分别是:
指向底层数组的指针
slice 中元素的长度
slice 的容量(可供增长的最大值)
声明:

//A、创建一个nil slice;slice==nil 
var slice0 []byte
//B、直接创建且初始化0个元素  一个empty slice
var slice1 = []byte{}
slice2 := []byte{}
//make 创建具有初始值 make([]byte,5,10)初始化切片 且初始5个元素  预留10个元素的存储空间
slice3 := make([]byte, 5, 10)
slice4 := make([]byte, 0, 10)
slice5 := make([]byte, 0)

nil slice声明的slice ,常用于函数返回slice是使用;empty slice声明并初始化的slice;

函数:
append(slice []Type,elems …Type)用法,elems可以是一排type类型的数据,也可以是slice,因为追加的一个一个的元素,因此如果将一个slice追加到另一个slice中需要带上”…”,这样才能表示是将slice中的元素依次追加到另一个slice中。它返回一个新的 slice。

arr := [...]int{1, 2, 3, 4, 5}//静态数组arr
s1 := []int{1, 2, 3, 4, 5}    //动态slice
s2 := arr[:]
//执行append
s2 = append(s2, 1, 2)
s2 = append(s2, s1...)
s2 = append(s2, arr[:]...)

注:若slice 的容量足够,那么底层数组不会发生改变,否则会重新分配内存空间。此时若使用&取值操作的元素可能失效。
cap() 函数返回的是数组切片分配的空间大小
len() 函数返回的是数组切片中当前所存储的元素个数

元素下标从0开始
切片可以从数组中复制,
array[startIndex:endIndex]表示:获取数组中第startIndex位置到endIndex-1区间的元素. 其切片长度为:endIndex-startIndex
startIndex和endIndex为可选项
startIndex 不设置时,默认从头开始,endIndex 不设置时,默认截取到末尾

参考:
http://www.jb51.net/article/56828.htm
http://www.cnblogs.com/howDo/archive/2013/04/25/GoLang-Array-Slice.html
go语言编程 许式伟

版权声明:本文为博主原创文章,未经博主允许不得转载。


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

本文来自:CSDN博客

感谢作者:xia_xing

查看原文:golang 数组切片(一)

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

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