聊聊Go語言中的陣列與切片
1. 陣列
var a [3]int // array of 3 integersfmt.Println(a[0]) // print the first elementfmt.Println(a[len(a)-1]) // print the last element, a[2]預設情況下,陣列的每個元素都被初始化為元素型別對應的零值,對於數字型別來說就是 0。
var q [3]int = [3]int{1, 2, 3}var r [3]int = [3]int{1, 2}fmt.Println(r[2]) // "0"
q := [...]int{1, 2, 3}fmt.Printf("%T\n", q) // "[3]int"
陣列的長度必須是常量表示式,因為陣列的長度需要在編譯階段確定。
q := [3]int{1, 2, 3}q = [4]int{1, 2, 3, 4} // compile error: cannot assign [4]int to [3]int
a := [2]int{1, 2}b := [...]int{1, 2}c := [2]int{1, 3}fmt.Println(a == b, a == c, b == c) // "true false false"d := [3]int{1, 2}fmt.Println(a == d) // compile error: cannot compare [2]int == [3]int2. 切片(Slice)
指標指向第一個 slice 元素對應的底層陣列元素的地址,要注意的是 slice 的第一個元素並不一定就是陣列的第一個元素。 長度對應 slice 中元素的數目; 長度不能超過容量,容量一般是從 slice 的開始位置到底層資料的結尾位置。內建的 len 和 cap 函式分別返回 slice 的長度和容量。
months := [...]string{1: "January", /* ... */, 12: "December"}
通常,陣列的第一個元素從索引 0 開始,但是月份一般是從 1 開始的,因此我們宣告陣列時直接跳過第 0 個元素,第 0 個元素會被自動初始化為空字串。

Q2 := months[4:7]summer := months[6:9]fmt.Println(Q2) // ["April" "May" "June"]fmt.Println(summer) // ["June" "July" "August"]兩個 slice 都包含了六月份。
append 函式
var runes []runefor _, r := range "Hello, 世界" { runes = append(runes, r)}fmt.Printf("%q\n", runes) // "['H' 'e' 'l' 'l' 'o' ',' ' ' '世' '界']"
func main() {
var x, y []int
for i := 0; i < 10; i++ {
y = appendInt(x, i)
fmt.Printf("%d cap=%d\t%v\n", i, cap(y), y)
x = y
}
}
//每一次容量的變化都會導致重新分配記憶體和copy操作:
0 cap=1 [0]
1 cap=2 [0 1]
2 cap=4 [0 1 2]
3 cap=4 [0 1 2 3]
4 cap=8 [0 1 2 3 4]
5 cap=8 [0 1 2 3 4 5]
6 cap=8 [0 1 2 3 4 5 6]
7 cap=8 [0 1 2 3 4 5 6 7]
8 cap=16 [0 1 2 3 4 5 6 7 8]
9 cap=16 [0 1 2 3 4 5 6 7 8 9]


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2926164/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- goioc:一個使用 Go 寫的簡易的 ioc 框架
- 把 Go 放到 Nginx C module 之中
- 快收藏!最全GO語言實現設計模式
- Google 發出了 40000 次國家支援駭客攻擊警告
- MongoDB中如何優雅地刪除大量資料
- 跟我一起梳理MongoDB基本知識
- Google:2022年API安全性研究報告
- 適用場景全新升級!擴充套件 Dragonfly2 作為分散式快取系統架構 | 龍蜥技術
- MongoDB遷移工具Mongoshake
- Go1.20 新版覆蓋率方案解讀
- SegmentFault 思否技術週刊 Vol.71 — 解讀 Go 語言
- 技術徵文中獎名單公佈 丨淺談 Go 語言框架
- 「Goravel 上新」使用者授權模組,讓你簡單的對非法使用者 Say No!
- golang語言SAAS下多應用模式框架
- 我認為 Go 的成功歸功於這 5 個方面