文章目錄
- 數據結構進階
- map
- map示例
- slice
- interface
- embedded
數據結構進階
map
map
讀取某個值時 - 返回結果可以為value,bool
或者value
。注意后者,在key不存在時,會返回value對應類型的默認值map
的range
方法需要注意 -key,value
或者key
。注意后者,可以和slice
的使用結合起來map
的底層相關的實現 - 串聯 初始化、賦值、擴容、讀取、刪除 這五個常見實現的背后知識點,詳細參考示例代碼鏈接與源碼
map示例
map
的range
操作 - key、value 都是值復制map
如何保證按key的某個順序遍歷? - 分兩次遍歷,第一次取出所有的key并排序;第二次按排序后的key去遍歷(這時你可以思考封裝map和slice到一個結構體中)?map
的使用上,有什么要注意的? - 遍歷時,盡量只修改或刪除當前key,操作非當前的key會帶來不可預知的結果- 從
map
的設計上,我們可以學到 - Go語言對map底層的hmap做了很多層面的優化與封裝,也屏蔽了很多實現的細節,適用于絕大多數的場景;而少部分有極高性能要求的場景,就需要深入到hmap中的相關細節。
slice
- 熟悉
slice
的底層數據結構 - 實際存儲數據的array
,當前長度len
與容量cap
slice的擴容機制
- 不嚴格來說,當長度小于1024時,cap翻倍;大于1024時,增加1/4slice
有很多特性與map
一致 - 記住一點,代碼中操作的slice
和map
只是上層的,實際存儲數據的是array
與hmap
interface
- interface的兩種類型 -
數據結構的interface
,側重于類型;面向對象中接口定義的interface
,側重于方法的聲明 - 了解interface的底層定義 -
eface
和iface
,都分為兩個部分:類型
與數據
iface
底層對類型匹配進行了優化 -map
+mutex
組合
embedded
embedded
的核心思想 - 面向對象中的組合思想,主要體現出了代碼復用- 項目實戰中,常見用到embedded的場景 - 結構體之間存在大量的復用的邏輯,抽象出一個
基類
來作為embedded
interface
的設計原則 - 方法盡量少,通過組合來實現復雜的interface