目錄
1. 切片是個啥?從數組到切片的靈魂進化
數組與切片的愛恨情仇
切片的內存結構:三巨頭共舞
切片的初始化方式:靈活到飛起
切片的“引用”特性:福也是禍
源碼初探:切片的誕生
2. 切片三劍客:len、cap 和底層數組的三角戀
len 和 cap 的微妙關系
切片共享的秘密:底層數組的那些事兒
SliceHeader 的源碼解析
cap 的計算規則
切片越界 panic 的真相
切片與零值的微妙關系
實戰小例子:切片的 len 與 cap 之舞
3. 切片操作的魔法棒:切片表達式與擴容的秘密
切片表達式的三種玩法
切片越界的“紅線”
擴容的秘密:切片為何能“長大”
擴容策略的源碼解析
擴容的性能陷阱
三索引切片的妙用
4. append 函數的真面目:追加背后的內存博弈
append 的基本用法
append 的實現原理
append 的內存博弈
append 的常見坑
append 與切片表達式的配合
性能優化:讓 append 飛起來
小實驗:append 的擴容軌跡
5. copy 函數的溫柔一刀:復制的藝術與陷阱
copy 的基本用法
copy 的內存行為
copy 的源碼探秘
copy 的常見陷阱
copy 與 append 的配合
性能考量:copy 的代價
小實驗:copy 的邊界行為
6. 切片與并發:goroutine 下的切片生存指南
切片為何在并發中“鬧脾氣”
用鎖保護切片
append 在并發中的陷阱
用通道序列化操作
三索引切片在并發中的妙用
并發中的性能考量
小實驗:并發安全的切片
7. 切片的性能優化秘籍:從微秒到納秒的飛躍
切片的性能痛點
優化技巧 1:預分配容量
優化技巧 2:批量操作
優化技巧 3:避免不必要的復制
優化技巧 4:清理無用切片
優化技巧 5:并發場景的優化
小實驗:性能對比
8. 源碼探秘:runtime 包中的切片魔法
SliceHeader 的核心
makeslice:切片的誕生
growslice:擴容的幕后英雄
slicecopy:復制的秘密
sliceslice:切片表達式的實現
性能優化的源碼啟示
小實驗:模擬 makeslice
1. 切片是個啥?從數組到切片的靈魂進化
切片(Slice)是 Go 語言中最讓人又愛又恨的數據結構之一。它靈活得像個變戲法的魔術師,功能強大到能讓你忘記數組的存在,但稍不留神,它也能讓你踩進內存泄漏或性能陷阱的深坑。想玩轉切片?先得搞清楚它到底是個啥!