> 可以理解為動態數組。切片是引用調用,傳指針,訪問和遍歷與數組一致。slice的元素地址指向數組對應元素的地址。slice從底層來講,是一個數據結構struct
`var a []int//不確定長度的int類型切片`
```
package main
import (
"fmt"
)
func main() {
var intArr [5]int = [...]int{1, 22, 33, 66, 99}
slice := intArr[1:3] //引用1->3,不包含3
? ? fmt.Println("slice的元素", slice)
? ? fmt.Println("slice的元素個數", len(slice))
? ? fmt.Println("slice的容量", cap(slice)) //切片的容量是可以動態變化的
for index, value := range slice {
? ? ? ? fmt.Printf("下標是%v 值為%v\\n", index, value)
? ? }
}
```

> 切片的使用方式
1. 定義一個切片,讓切片去引用一個創建好的數組。直接引用數組,數組事先存在,程序員是可見的
2. 通過make來創建切片 `var 切片名 []type([],len,[cap])` `var slice []int = make([]int,4,10)` type 數據類型 len 大小 cap 容量。由切片在底層進行維護,程序員不可見
3. 指定具體數組,原理類似make `var slice []int = []int {1,3,4}`

> 相關函數庫builtin
append:內建函數append將元素追加到切片的末尾。若它有足夠的容量,其目標就會重新切片以容納新的元素。否則,就會分配一個新的基本數組。append返回更新后的切片,因此必須存儲追加后的結果。
```
slice = append(slice,elem1,elem2)
```

copy:內建函數copy將元素從來源切片復制到目標切片中,也能將字節從字符串復制到字節切片中。copy返回被復制的元素數量,它會是 len(src) 和 len(dst) 中較小的那個。來源和目標的底層內存可以重疊
copy(目標slice,來源slice)
目標slice長度小于來源slice,不報錯

- 數據類型
- 數組array
- 切片slice
- 字符串string
- map
- 結構體struct
- 方法func
- 匿名結構體(繼承)
- 字段別名
- 接口interface
- 常量
- 基礎語法
- 循環for
- 遍歷
- 函數func
- defer
- 異常處理error
- 訪問范圍
- 包
- 類型斷言
- 文件
- 打開文件
- 讀取文件
- 寫文件
- 判斷是否存在
- 拷貝文件
- JSON
- 序列化
- 反序列化
- 命令行
- 雜項
- Windows下配置加速
- 相關鏈接
- 占位符
- 隨機數rand
- 單元測試
- goroutine
- 并發和并行
- 協程和主線程
- MPG模式
- 設置CPU數量
- 全局互斥鎖
- 管道
- 示例1
- 示例2
- select
- 異常捕獲
- 反射
- 示例
- 示例-改變值
- 網絡編程
- TCP編程
- 示例一
- redis