文章《A Tour of Go》是官方文檔,地址是https://tour.golang.org/welcome/1。
該文檔在官方《Go Documentation》系列文檔中的位置如圖所示。
Go Documentation
以下是我的學習筆記的第二部分。
More types: structs, slices, and maps
- Go有指針,零值是
nil
,有&
和*
操作符,但沒有指針算術 -
struct
是一些字段/屬性(field
集合,語法以type
開頭:type Vertex struct
-
struct
的field
用點號(.
)訪問 - 通過指針訪問也只需使用點號(
.
),不用加星號(*
),p.X
即可 -
struct
的屬性可以用Name:
語法初始化,順序無關緊要,不關心的屬性也可以缺省 - 數組的長度是數組結構的一部分,因此數組不能被
resize
;數組可以直接輸出; - 切片
slice
是動態大小的,可以從數組創建(前閉后開區間) -
slice
不存儲數據,只是指向了底層數據的某個區間,因此一個切片更改后,真實數據會被更改,其他指向同一數組區間的slice
就可能看到改動 - 字面常量切片先構建一個數組,然后指向它構建切片(可能需要去看內存模型The Go Memory Model);現場定義的
struct
切片初始化 -
slice
的起始和結束位置都是可以省略的,默認值是數據的開始位置(0)和結束位置(length) -
slice
有長度(length
)和容量(capacity
),length
是切片擁有的元素個數,capacity
是從切片開始位置到數據結束位置的元素個數,可以分別用len(s)
和cap(s)
獲得 -
slice
的零值是nil
,nil slice
長度為0,容量為0,沒有實質分配內存 -
slice
可以用make
創建,可以指定length
和capacity
-
slice
可以指向任何類型,包括slice
-
append
添加元素,如果超長了,會重新分配內存,并指向新的地址(略坑??啊),詳細參考Go Slices: usage and internals -
range
返回位置和元素的副本(copy
),用在for
循環里遍歷slice
或者map
- 使用下劃線扔掉不關心的變量,比如循環中
range
返回的index
或者value
- 關于
slice
的一個小練習
slice練習代碼
生成的圖像如下:
slice練習輸出圖像 -
map
的零值是nil
,一個nil
的map沒有key
,也不能添加;可以用make
函數構造一個map
,它會被初始化并可用 -
map literals
(官方翻譯是map文法)跟struct
類似,不過需要有鍵值 - 頂級類型只有類型名時,可以省略
未完待續。