以下筆記摘錄自『 The Go Workshop 』。
切片的核心其實還是陣列,切片只是在陣列外套上一層額外的包裝,讓我們能夠建立有數字索引鍵的有序集合,也不必擔心長度問題,並且,我們可以很簡單的使用Golang的內建函式append()去新增元素,可以透過以下方法:
<新切片> = append(<切片>, <新元素>)
大部分的程式碼很少使用陣列,應盡量使用切片取裡所有的有序集合。
append()可以一次加入多個值到切片裡,因為第二個值可以接收數量不定的值:
<新切片> = append(<切片>, <新元素1>, <新元素2>,..., <新元素N>)
我們也能在append()裡面傳入一個切片,在後面加上解包算符(unpack operator),也就是...
。
For example,
package main
import (
"fmt"
"os"
)
func getPassedArgs() []string {
var args []string
for i := 1; i < len(os.Args); i++ {
args = append(args, os.Args[i])
}
return args
}
func getLocals(extraLocals []string) []string {
var names []string
names = append(names, "Leo", "Fanny")
names = append(names, extraLocals...)
return names
}
func main() {
names := getLocals(getPassedArgs())
fmt.Println("名字:", names)
}
//Command line
go run . Jannet
//Output
名字: [Leo Fanny Jannet]
<新切片> = <陣列或切片>[<起始索引>:<結束索引(不含)>]
範圍會從起始索引算起,一直到結束索引的前一個索引
注意!!當我們使用這種方法時,golang不會真的將資料複製到新的陣列。
For example,
package main
import "fmt"
func message() string {
s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
m := fmt.Sprintln("元素:", s[2:7])
return m
}
func main() {
fmt.Print(message())
}
//Output
元素: [3 4 5 6 7]