聊聊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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- go語言之陣列與切片Go陣列
- go陣列與切片Go陣列
- Go 語言中的 切片 --sliceGo
- 認識 Go 語言中的陣列Go陣列
- Go語言中切片slice的宣告與使用Go
- Go 陣列&切片Go陣列
- Go 語言學習筆記之陣列與切片Go筆記陣列
- go語言學習-陣列-切片-mapGo陣列
- go(5)陣列,切片。Go陣列
- go語言中遍歷陣列的方法有哪些Go陣列
- Go 語言基礎 陣列、切片、對映Go陣列
- Go語言系列(三)之陣列和切片Go陣列
- GO語言————7.6 字串、陣列和切片的應用Go字串陣列
- Go中陣列和切片Go陣列
- 介紹 Go 的陣列和切片Go陣列
- 簡單分析Go語言中陣列的這些細節Go陣列
- c語言中陣列的宣告與初始化C語言陣列
- 七、陣列與切片陣列
- go語言教程之淺談陣列和切片的異同Go陣列
- 深度解析 Go 語言中「切片」的三種特殊狀態Go
- go中陣列,切片和append的玄學Go陣列APP
- 小白對go陣列及切片的學習Go陣列
- 聊聊 Go 語言中的物件導向程式設計Go物件程式設計
- c語言中三維陣列C語言陣列
- c語言中陣列的三種型別C語言陣列型別
- Go 如何對陣列切片進行去重Go陣列
- 大資料開發-Go-陣列,切片大資料Go陣列
- go 語言陣列Go陣列
- Julia 語言中的生成器表示式與陣列推導式陣列
- c語言中計算陣列長度的方法C語言陣列
- 詳解資料結構中的“陣列”與程式語言中的“陣列”的區別和聯絡資料結構陣列
- Go 語言中的方法Go
- 快速理解Go陣列和切片的內部實現原理Go陣列
- C語言中陣列溢位是什麼C語言陣列
- GO語言————7.5 切片的複製與追加Go
- Go語言中JSON標籤的用法與技巧GoJSON
- 聊聊 Go 語言中的 JSON 序列化與 js 前端互動型別失真問題GoJSON前端型別
- go 語言切片Go