天天看點

Go程式設計基礎-基礎篇 10

切片的建立

切片在使用之前必須要初始化,它沒有零值。聲明後它的值是 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           

複制