- Go語言高級編程(第2版)
- 柴樹杉 曹春暉
- 560字
- 2025-08-07 17:56:11
1.3 數(shù)組、字符串和切片
在主流的編程語言中,數(shù)組及其相關(guān)的數(shù)據(jù)結(jié)構(gòu)是使用最為頻繁的,只有在數(shù)組及其相關(guān)的數(shù)據(jù)結(jié)構(gòu)不能滿足時才會考慮鏈表、哈希表(哈希表可以看作是數(shù)組和鏈表的混合體)和更復(fù)雜的自定義數(shù)據(jù)結(jié)?構(gòu)。
在Go語言中,數(shù)組、字符串和切片三者是密切相關(guān)的數(shù)據(jù)結(jié)構(gòu)。這3種數(shù)據(jù)類型的底層原始數(shù)據(jù)有著相同的內(nèi)存結(jié)構(gòu),但因為語法的限制,在上層卻有著不同的行為表現(xiàn)。首先,Go語言的數(shù)組是一種值類型,雖然數(shù)組的元素可以被修改,但是數(shù)組本身的賦值和函數(shù)傳參都是以整體復(fù)制的方式處理的。其次,Go語言的字符串底層數(shù)據(jù)也是字節(jié)數(shù)組,但是字符串的只讀屬性禁止了在程序中對底層字節(jié)數(shù)組的元素的修改,字符串賦值只是復(fù)制了數(shù)據(jù)地址和對應(yīng)的長度,而不會導(dǎo)致底層數(shù)據(jù)的復(fù)制。最后,切片的行為更為靈活,切片的結(jié)構(gòu)和字符串結(jié)構(gòu)類似,但是解除了只讀限制。雖然切片的底層數(shù)據(jù)也是相應(yīng)數(shù)據(jù)類型的數(shù)組,但是每個切片還有獨立的長度和容量信息,切片賦值和函數(shù)傳參時也是將切片頭信息部分以傳值的方式處理。因為切片頭含有底層數(shù)據(jù)的指針,所以它的賦值也不會導(dǎo)致底層數(shù)據(jù)的復(fù)制。Go語言的賦值和函數(shù)傳參規(guī)則很簡單,除閉包函數(shù)以引用的方式對外部變量訪問之外,其他賦值和函數(shù)傳參都以傳值的方式處理。要理解數(shù)組、字符串和切片這3種不同的處理方式的原因,需要詳細了解它們的底層數(shù)據(jù)結(jié)?構(gòu)。
- 深入淺出Electron:原理、工程與實踐
- Clojure for Domain:specific Languages
- Mastering Articulate Storyline
- C語言最佳實踐
- 程序員考試案例梳理、真題透解與強化訓(xùn)練
- Full-Stack Vue.js 2 and Laravel 5
- TypeScript項目開發(fā)實戰(zhàn)
- ElasticSearch Cookbook(Second Edition)
- Julia 1.0 Programming Complete Reference Guide
- AV1視頻編解碼標(biāo)準(zhǔn):原理與算法實現(xiàn)
- Go語言從入門到精通
- Oracle 12c從入門到精通(視頻教學(xué)超值版)
- Implementing Microsoft Dynamics NAV(Third Edition)
- Java從入門到精通(視頻實戰(zhàn)版)
- Kotlin語言實例精解