官术网_书友最值得收藏!

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)。

主站蜘蛛池模板: 兴城市| 汉中市| 济南市| 沙坪坝区| 临汾市| 大英县| 峨山| 十堰市| 博湖县| 新河县| 昌乐县| 宜都市| 舞阳县| 镇康县| 江西省| 东莞市| 汝城县| 越西县| 九寨沟县| 宁远县| 宜春市| 湖州市| 鄂伦春自治旗| 合水县| 桦南县| 新沂市| 鄂伦春自治旗| 米泉市| 德庆县| 南丰县| 大同县| 黎平县| 湖北省| 中西区| 武穴市| 灵寿县| 民权县| 东乌珠穆沁旗| 桑植县| 上杭县| 汤阴县|