切片是基於數據中連續片斷的引用,是一個引用類型。與數組相比,切片的長度能夠在運行時修改,能夠將切片看做是長度可變的動態數組。數組
切片的實現是由一個底層數組以及其上面的動態位置,尺寸來實現。由指向底層數組的指針、訪問元素的個數(即長度length)和容許增加到的元素個數(即容量capacity)組成。bash
使用內置函數make()建立切片:app
var slice []type = make([]type, len, cap)
也能夠簡寫: slice := make([]type, len, cap)
ide
// 只指定長度,那麼切片的容量和長度相等
slice1 := make([]string, 5) // 建立一個字符串切片,其長度和容量都是5個元素
// 分別指定長度和容量建立的切片
slice2 := make([]int, 3, 5) // 建立一個整型切片,其長度爲3個元素,容量爲5個元素
複製代碼
var identifier []type
函數
slice1 := []string{"Red", "Blue", "Green", "Yellow", "Pink"} // 長度和容量都是5個元素的字符串切片
slice2 := []int{10, 20, 30} // 長度和容量都是3個元素的整型切片
slice3 := []string{99: ""} // 建立字符串切片,使用空字符串初始化第100個元素
複製代碼
// 建立有3個元素的整型數組
array := [3]int{10,20,30}
// 建立長度和容量都是3的整型切片
slice := []int{10, 20, 30}
複製代碼
若是在[]運算符裏指定了一個值,那麼建立的就是數組而不是切片。spa
聲明切片後未作初始化就會默認爲 nil,長度爲 0,實例以下:指針
// 建立nil整型切片
var slice []int
複製代碼
利用初始化,經過聲明一個切片能夠建立一個空切片,實例以下:code
// 使用make建立空的整型切片
slice := make([]int, 0)
// 使用切片字面量建立空的整型切片
slice := []int{}
複製代碼
使用[]操做符就能夠改變某個元素的,實例以下:索引
// 建立一個整型切片
// 其容量和長度都是5個元素
slice := []int{10, 20, 30, 40, 50}
// 改變索引爲1的元素的值
slice[1] = 25
複製代碼
使用切片建立切片ci
// 建立一個整型切片
// 其長度和容量都是5個元素
slice := []int{10, 20, 30, 40, 50}
// 建立一個新切片
// 其長度爲2個元素,容量爲4個元素
newSlice := slice[1:3]
複製代碼
以上兩個切片它們共享同一段底層數組,經過不一樣的切片會看到底層數組的不一樣部分。
使用append向切片增長元素
// 建立一個整型切片
// 其長度和容量都是5個元素
slice := []int{10, 20, 30, 40, 50}
// 建立一個新切片
// 其長度爲2個元素,容量爲4個元素
newSlice := slice[1:3]
// 使用原有的容量來分配一個新元素
// 將新元素賦值爲60
newSlice = append(newSlice, 60)
複製代碼
使用append同時增長切片的長度和容量
// 建立一個整型切片
// 其長度和容量都是4個元素
slice := []int{10, 20, 30, 40}
// 向切片追加一個新元素
// 將新元素賦值爲50
newSlice := append(slice, 50)
複製代碼
使用 for range 迭代切片
// 建立一個整型切片
// 其長度和容量都是4個元素
slice := []int{10, 20, 30, 40}
// 迭代每個元素,並顯示其值
for index, value := rang slice {
fmt.Printf{"Index: %d Value: %d\n", index, value}
}
OutPut:
Index: 0 Value: 10
Index: 1 Value: 20
Index: 2 Value: 30
Index: 3 Value: 40
複製代碼
使用 for 循環迭代切片
// 建立一個整型切片
// 其長度和容量都是4個元素
slice := []int{10, 20, 30, 40}
// 從第三個元素開始迭代每一個元素
for index := 2; index < len(slice); index++ {
fmt.Printf("Index: %d Value: %d\n", index, slice[index])
}
Output:
Index: 2 Value: 30
Index: 3 Value: 40
複製代碼