Go语言中,数组是一种具有相同类型固定大小的一种数据结构,数组定义会定义长度
数组的声明语法如下:
var 数组变量名 [元素数量]Type
a:= [3]int{}
//我们可以通过如下方式给数组赋值
a[0] = 1
a[1] = 2
a[2] = 3
//数组遍历
for i, v := range a {
fmt.Printf("%d %d\n", i, v)
}
//数组比较
如果两个数组类型相同(包括数组的长度,数组中元素的类型)的情况下,我们可以直接
过较运算符(==
和!=
)来判断两个数组是否相等,只有当两个数组的所有元素都是相等的时候数组才是相等的,不能比较两个类型不同的数组,否则程序将无法完成编译。
一.在Go中,数组属于基本类型,他们之间的赋值,传递是属于值拷贝,同样的,如果将数组作为参数在函数间传递,也是属于值拷贝
例子:
Array1:=[3] int{}
Array2:=[2] int{1,2}
Array3:=[2] int{4,5}
Array3[0]=6
fmt.Println(Array1, Array2, Array3)
结果:0,0,0;4,5;6,5
二.只有长度相同和类型相同的才能赋值
q := [3]int{1, 2, 3}
q = [4]int{1, 2, 3, 4} // 编译错误:无法将 [4]int 赋给 [3]int
三.数组的长度是固定的,没办法动态增加数组的长度。而切片却没有这个限制,实际上在 Go 中,切片比数组更为常见。
切片
切片(slice)是建立在数组之上的更方便,更灵活,更强大的数据结构。切片并不存储任何元素而只是对现有数组的引用。
一:元素类型为 T 的切片表示为: []T。通过数组创建一个切片
a := [5]int{ 76, 77, 78, 79, 80}
var b []int = a[1:4] //creates a slice from a[1] to a[3]
fmt.Println(b)
通过 a[start:end] 这样的语法创建了一个从 a[start] 到 a[end -1] 的切片。在上面的程序中,第 9 行 a[1:4] 创建了一个从 a[1] 到 a[3] 的切片。因此 b 的值为:[77 78 79]。
二:创建切片的另一种方式:
c := []int{ 6, 7, 8} //creates and array and returns a s