slice和數組的區別:聲明數組時,方括號內寫明了數組的長度或使用...自動計算長度,而聲明slice時,方括號內沒有任何字符。
函數一共就兩個 一個
## append
## copy
~~~
var s1 []int //聲明切片和聲明array一樣,只是少了長度,此為空(nil)切片
s2 := []int{}
//make([]T, length, capacity) //capacity省略,則和length的值相同
var s3 []int = make([]int, 0)
s4 := make([]int, 0, 0)
s5 := []int{1, 2, 3} //創建切片并初始化
~~~
**注意**:make只能創建slice、map和channel,并且返回一個有初始值(非零)。
| 操作 | 含義 |
| --- | --- |
| **s\[n\]** | 切片s中索引位置為n的項 |
| **s\[:\]** | 從切片s的索引位置0到len(s)-1處所獲得的切片 |
| **s\[low:\]** | 從切片s的索引位置low到len(s)-1處所獲得的切片 |
| **s\[:high\]** | 從切片s的索引位置0到high處所獲得的切片,len=high |
| **s\[low:high\]** | 從切片s的索引位置low到high處所獲得的切片,len=high-low |
| **s\[low:high:max\]** | 從切片s的索引位置low到high處所獲得的切片,len=high-low,cap=max-low |
| **len(s)** | 切片s的長度,總是<=cap(s) |
| **cap(s)** | 切片s的容量,總是>=len(s) |
~~~
package main
import "fmt"
func main() {
s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
s1 := s[2:5] //[2 3 4]
s1[2] = 100 //修改切片某個元素改變底層數組
fmt.Println(s1, s) //[2 3 100] [0 1 2 3 100 5 6 7 8 9]
s2 := s1[2:6] // 新切片依舊指向原底層數組 [100 5 6 7]
s2[3] = 200
fmt.Println(s2) //[100 5 6 200]
fmt.Println(s) //[0 1 2 3 100 5 6 200 8 9]
}
~~~