切片的建立
切片在使用之前必須要初始化,它沒有零值。聲明後它的值是 nil
package main
import "fmt"
func main() {
var a []int
fmt.Println("初始化前:", a)
a = make([]int, 5, 10)
fmt.Println("初始化後:", a)
a[4] = 6
fmt.Println("指派後:", a)
}
複制
初始化前: []
初始化後: [0 0 0 0 0]
指派後: [0 0 0 0 6]
複制
切片的截取
可以從任意長度開始切,切到任意長度為止,然後這一段拿出來就是一個新的切片
package main
import "fmt"
func main() {
var a = []int{1, 2, 3, 4, 5}
fmt.Println("a[1:3]=", a[1:3])
fmt.Println("a[1:]=", a[1:])
fmt.Println("a[:3]=", a[:3])
}
複制
a[1:3]= [2 3]
a[1:]= [2 3 4 5]
a[:3]= [1 2 3]
複制
切片的追加
package main
import "fmt"
func main() {
var a = []int{1, 2, 3, 4, 5}
a = append(a, 6)
fmt.Println(a)
a = append(a, 7, 8)
fmt.Println(a)
b := []int{9, 10}
a = append(a, b...)
fmt.Println(a)
}
複制
[1 2 3 4 5 6]
[1 2 3 4 5 6 7 8]
[1 2 3 4 5 6 7 8 9 10]
複制
切片的長度和容量
在切片中可以使用len()擷取切片中元素的數量,也就是切片的長度。使用cap()可以擷取切片引用的數組的長度,也就切片的容量
s[begin?max]
截取切片s從begin到end的資料,構成一個容量為max-begin,長度為begin-end的切片。
s[begin:end]
截取切片s從begin到end的資料,構成一個容量和長度均為begin-end的切片。
s[begin:]
截取切片s從begin到最後的資料,構成一個容量和長度均為len(s)-end的切片。
s[:end]
截取切片s從0到最後的資料,構成一個容量和長度均為end-0的切片。
package main
import "fmt"
func main() {
var a = []int{1, 2, 3, 4, 5}
fmt.Printf("a的位址%p,a的長度%d,a的容量%d\n", a, len(a), cap(a))
a = append(a, 6)
fmt.Printf("a的位址%p,a的長度%d,a的容量%d\n", a, len(a), cap(a))
a = append(a, 7, 8)
fmt.Printf("a的位址%p,a的長度%d,a的容量%d\n", a, len(a), cap(a))
b := []int{9, 10, 11}
a = append(a, b...)
fmt.Printf("a的位址%p,a的長度%d,a的容量%d\n", a, len(a), cap(a))
}
複制
a的位址0xc0000aa030,a的長度5,a的容量5
a的位址0xc0000ba000,a的長度6,a的容量10
a的位址0xc0000ba000,a的長度8,a的容量10
a的位址0xc0000bc000,a的長度11,a的容量20
複制