数组是具备相同惟一类型的一组已编号且长度固定的数据项序列(同构的数据结构);这种类型能够是任意的原始类型,例如整型、字符串或者自定义类型。python
数组长度必须是一个常量表达式,而且必须是一个非负整数。数组
数组成都也是数组类型的一部分,因此[5]int和[10]int是属于不一样类型的。数据结构
数组是一种值类型。ide
数组的编译时,值初始化时按照数组顺序完成的函数
知识扩展:1.PHP中的数组其实是一个有序映射。映射是一种把values关联到keys的类型;2.C语言中的数组是指向首元素的指针spa
声明的格式:var identifier [len]type。例如: var arr1 [5]int。指针
备注:Go语言中的数组是一种值类型(C/C++中是指向首元素的指针)。Go中的数组能够用new()来建立:var arr1 = new([5]int),这种方式建立出来的数组arr1的类型是*[5]int,而arr2的类型是[5]int。当把数组做为参数传给函数是,会产生一次赋值,函数就不会修改原始数组。code
arr1 := new([3]int) arr2 := arr1 arr2[1] = 23 fmt.Println(arr1[1]) // 结果为23,由于arr1的类型是*[3]int
1 var arr1 = [5]int{1,2,3,4,5} // 也是写成[5]int{1,2}其余位置的值默认0 2 var arr2 = [...]int{1,2,3,4,5} // 从技术上说变成了切片 3 var arr3 = [5]string{2:'kobe',3:'paul'} // 索引23被赋值
切片(slice)是对数组一个连续片断的引用(该数组咱们称之为相关数组,一般是匿名的),因此切片时一个引用类型。blog
声明切片的格式是:var identifier []type (备注:不须要说明其长度)索引
切片在未初始化以前为nil,长度为0。
切片的特色
切片的建立
var slice1 = []int{1,2,3,4} // 建立了一个长度为4的数组,并建立了一个相关切片 var slice2 = make([]int,5) // make([]type,len,cap)(cap可选参数) var slice3 = new([]int) // slice3=nil,切片没有被初始化,make()建立的会直接初始化。
切片的原理
在内存中是一个3个域的结构体:指向相关数组的指针,切片长度及切片容量。
使用make生成切片的原理
方式 var slice1 := make([]type,len,cap) 参数分别是切片类型,切片长度,切片容量。cap参数可选,若是忽略的话,默认建立的切片len=cap
1 //这两种方法生成相同的切片,切片是引用类型,因此他们类型也是相同的 2 make([]int,50,100) 3 new([100]int)[0:50]
make()方法生成的切片的内存结构