Go 中數(shù)組的長度是不可改變的,而 Slice 解決的就是對不定長數(shù)組的需求。他們的區(qū)別主要有兩點(diǎn)。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供雞澤網(wǎng)站建設(shè)、雞澤做網(wǎng)站、雞澤網(wǎng)站設(shè)計、雞澤網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、雞澤企業(yè)網(wǎng)站模板建站服務(wù),10余年雞澤做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
數(shù)組:
切片:
注意 1
雖然數(shù)組在初始化時也可以不指定長度,但 Go 語言會根據(jù)數(shù)組中元素個數(shù)自動設(shè)置數(shù)組長度,并且不可改變。切片通過 append 方法增加元素:
如果將 append 用在數(shù)組上,你將會收到報錯:first argument to append must be slice。
注意 2
切片不只有長度(len)的概念,同時還有容量(cap)的概念。因此切片其實(shí)還有一個指定長度和容量的初始化方式:
這就初始化了一個長度為3,容量為5的切片。
此外,切片還可以從一個數(shù)組中初始化(可應(yīng)用于如何將數(shù)組轉(zhuǎn)換成切片):
上述例子通過數(shù)組 a 初始化了一個切片 s。
當(dāng)切片和數(shù)組作為參數(shù)在函數(shù)(func)中傳遞時,數(shù)組傳遞的是值,而切片傳遞的是指針。因此當(dāng)傳入的切片在函數(shù)中被改變時,函數(shù)外的切片也會同時改變。相同的情況,函數(shù)外的數(shù)組則不會發(fā)生任何變化。
定義一個切片,然后讓切片去引用一個已經(jīng)創(chuàng)建好的數(shù)組。基本語法如下:
索引1:切片引用的起始元素位
索引2:切片只引用該元素位之前的元素
例程如下:
在該方法中,我們未指定容量cap,這里的值為5是系統(tǒng)定義的。
在方法一中,可以用arr數(shù)組名來操控數(shù)組中的元素,也可以通過slice切片來操控數(shù)組中的元素。切片是直接引用數(shù)組,數(shù)組是事先存在的,程序員是可見的。
通過 make 來創(chuàng)建切片,基本語法如下:
make函數(shù)第三個參數(shù)cap即容量是可選的,如果一定要自己注明的話,要注意保證cap≥len。
用該方法可以 指定切片的大小(len)和容量(cap)
例程如下:
由于未賦值系統(tǒng)默認(rèn)將元素值置為0,即:
數(shù)值類型數(shù)組:????默認(rèn)值為 0
字符串?dāng)?shù)組:? ? ? ?默認(rèn)值為 ""
bool數(shù)組:? ? ? ? ? ?默認(rèn)值為 false
在方法二中,通過make方式創(chuàng)建的切片對應(yīng)的數(shù)組是由make底層維護(hù),對外不可見,即只能通過slice去訪問各個元素。
定義一個切片,直接就指定具體數(shù)組,使用原理類似于make的方式。
例程如下:
切片是數(shù)組的抽象。 切片使用數(shù)組作為底層結(jié)構(gòu)。 切片包含三個組件:容量,長度和指向底層數(shù)組的指針。
通過使用 append 或 copy 函數(shù)可以增加切片的容量。 append 函數(shù)可以為數(shù)組的末尾增加值,并在需要時增加容量。
當(dāng)前儲存空間存不下數(shù)據(jù)時,空間會以之前的空間數(shù)*2
比如:
定義 numbers 的數(shù)組長度為5 ,空間給他10,并追加數(shù)據(jù)到切片。
空間為10, 當(dāng)我們再添加一個數(shù)據(jù)到切片時候,空間是多少了呢?
得到數(shù)據(jù)為20,和我們設(shè)想的一樣。
切片中的數(shù)據(jù)是共用內(nèi)存,也就是我們選區(qū)切片區(qū)間的某一個值,并且在這個小對象中進(jìn)行數(shù)據(jù)的修改,會影響整個切片的值,在開發(fā)當(dāng)中非常要注意這種。
舉個例子:
取了一個first 和second 這兩個數(shù)據(jù)重合的數(shù)據(jù)是2.
打印一下:
雖然在second 中修改了數(shù)據(jù),但是影響到了大對象numbers 的數(shù)據(jù),還有一個要注意的是,first 小對象,他的內(nèi)存分配是5,second 的空間是4,這是為啥呢?原來,這樣取的小對象切片,的空間是這個切片加上大對象末尾的值
開發(fā)中如果修改了其中的一個變量,但是又不想影響大對象,這個時候會傻掉。
那如何去獲取一個和numbers 一樣的數(shù)據(jù),但是又不會影響numbers呢?
我們copy一份numbers
輸出一下結(jié)果:
好,不懂在座的各位看懂了沒有。沒有影響的,通過copy 切片再去修改切片的值,是不會印象原切片的。
當(dāng)前文章:go語言08切片怎么使用 go切片操作
本文地址:http://chinadenli.net/article34/ddocose.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站制作、營銷型網(wǎng)站建設(shè)、企業(yè)建站、搜索引擎優(yōu)化、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)