Go 语⾔提供了数组类型的数据结构。
数组是具有相同唯⼀类型的⼀组已编号且⻓度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符 串或者⾃定义类型。
数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第⼀个元素索引为 0,第⼆个索引为 1,以 此类推。

= 是赋值, := 是声明变量并赋值



Go 语⾔切⽚是对数组的抽象。
Go 数组的⻓度不可改变,在特定场景中这样的集合就不太适⽤,Go 中提供了⼀种灵活,功能强悍的内置类型切⽚ ("动态数组"),与数组相⽐切⽚的⻓度是不固定的,可以追加元素,在追加时可能使切⽚的容量增⼤。
切片中的概念:

- [root@nginx-kafaka03 08-06]# cat test.go
- package main
-
- import "fmt"
-
- func main() {
- var slice1 []int
- fmt.Println(slice1)
- var slice2 []int = make([]int,5)
- fmt.Println(slice2)
- slice3 := make([]int,5)
- fmt.Println(slice3)
-
- }
- [root@nginx-kafaka03 08-06]# go run test.go
- []
- [0 0 0 0 0]
- [0 0 0 0 0]

- [root@nginx-kafaka03 08-06]# cat test.go
- package main
-
- import "fmt"
-
- func main() {
- s := [] int{1,2,3}
- s1 := s[0:2]
- fmt.Println(s,s1)
- }
- [root@nginx-kafaka03 08-06]# go run test.go
- [1 2 3] [1 2]
切⽚是可索引的,并且可以由 len() ⽅法获取⻓度。
切⽚提供了计算容量的⽅法 cap() 可以测量切⽚最⻓可以达到多少。
以下为具体实例:

可以通过设置下限及上限来设置截取切⽚ [lower-bound:upper-bound],实例如下:


如果想增加切⽚的容量,我们必须创建⼀个新的更⼤的切⽚并把原分⽚的内容都拷⻉过来。
下⾯的代码描述了从拷⻉切⽚的 copy ⽅法和向切⽚追加新元素的 append ⽅法。


看变量地址


数组和切片的区别:

数组的容量和⻓度是⼀样的。cap() 函数和 len() 函数均输出数组的容量(即⻓度)
数组是 值类型 ,将⼀个数组赋值给另⼀个数组时,传递的是⼀份拷⻉。
切⽚是 引⽤类型 ,切⽚包装的数组称为该切⽚的底层数组。看下⾯的例⼦:
注意数组是⼀个固定⻓度的,初始化时候必须要指定⻓度,不指定⻓度的话就是切⽚了
Go的切⽚是在数组之上的抽象数据类型,所以创建的切⽚始终都有⼀个数组存在。 举例说明:

- [a b c d e] [c d] [a b c]
- [a b 8 d e] [8 d] [a b 8]
数组与切⽚的赋值形式


从这个例⼦中可以看出,数组的赋值是值的拷⻉,是⼀个全新的数组。⽽切⽚的赋值是引⽤。下⾯再来看⼀个例⼦。

这个例⼦再⼀次说明:数组是赋值是copy,⽽切⽚仅是引⽤。例⼦1和例⼦2中的切⽚的声明⽤到了隐藏数组。再 来看下例⼦3,使⽤⾮隐藏数组的情况。



数组作为参数,被函数调⽤

切⽚被调⽤时,直接传递引⽤
