新聞中心
首先慶祝下golang終于通過(guò)了gfw的審核,可以不用翻墻訪(fǎng)問(wèn)了。goer就可以光明正大地訪(fǎng)問(wèn)http://golang.org/

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),二七企業(yè)網(wǎng)站建設(shè),二七品牌網(wǎng)站建設(shè),網(wǎng)站定制,二七網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,二七網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
這次還是要說(shuō)說(shuō)array,slice,map。雖然前面已經(jīng)說(shuō)過(guò)了,但是實(shí)際使用中發(fā)現(xiàn)對(duì)這幾個(gè)的使用和理解還是不夠詳細(xì)
現(xiàn)在再重新看看這幾個(gè)類(lèi)型
array類(lèi)型
array是固定長(zhǎng)度的數(shù)組,這個(gè)和C語(yǔ)言中的數(shù)組是一樣的,使用前必須確定數(shù)組長(zhǎng)度。但是和C中的數(shù)組相比,又是有一些不同的:
1 Go中的數(shù)組是值類(lèi)型,換句話(huà)說(shuō),如果你將一個(gè)數(shù)組賦值給另外一個(gè)數(shù)組,那么,實(shí)際上就是將整個(gè)數(shù)組拷貝一份
2 如果Go中的數(shù)組作為函數(shù)的參數(shù),那么實(shí)際傳遞的參數(shù)是一份數(shù)組的拷貝,而不是數(shù)組的指針。這個(gè)和C要區(qū)分開(kāi)。因此,在Go中如果將數(shù)組作為函數(shù)的參數(shù)傳遞的話(huà),那效率就肯定沒(méi)有傳遞指針高了。這個(gè)是不是有點(diǎn)陷阱的感覺(jué)?
3 array的長(zhǎng)度也是Type的一部分,這樣就說(shuō)明[10]int和[20]int是不一樣的。
array的結(jié)構(gòu)用圖示表示是這樣的:
len表示數(shù)組的長(zhǎng)度,后面的int儲(chǔ)存的是實(shí)際數(shù)據(jù)
slice類(lèi)型
看看Effective Go是怎么夸贊slice的:
Slice是Go程序中最常用的表示序列數(shù)組的類(lèi)型。為什么最經(jīng)常用它呢?
1 slice是可變長(zhǎng)的
定義完一個(gè)slice變量之后,不需要為它的容量而擔(dān)心,你隨時(shí)可以往slice里面加數(shù)據(jù)
比如:
v:=[]string{}
v=append(v, "hello")
這里附帶說(shuō)一下,slice和array的寫(xiě)法很容易混
v:=[2]string{"str1", "str2"} //這個(gè)是array
m:=[]string{"str1","str2"} //這個(gè)是slice
寫(xiě)法上默念:array有長(zhǎng)度slice沒(méi)長(zhǎng)度,array有長(zhǎng)度slice沒(méi)長(zhǎng)度…
2 slice是一個(gè)指針而不是值。
指針比值可就小多了,因此,我們將slice作為函數(shù)參數(shù)傳遞比將array作為函數(shù)參數(shù)傳遞會(huì)更有性能。
slice是一個(gè)指針,它指向的是一個(gè)array機(jī)構(gòu),它有兩個(gè)基本函數(shù)len和cap。
看下面的圖示:
slice是一個(gè)帶有point(指向數(shù)組的指針),Len(數(shù)組中實(shí)際有值的個(gè)數(shù)),Cap(數(shù)組的容量)
比如上面的這個(gè)slice,它指向的數(shù)組是[3]int,其中的前兩個(gè)有值,第三個(gè)為空
那么
len(slic) = 2
cap(slic) = 3
append函數(shù)就理解為往slice中加入一個(gè)值,如果未達(dá)到容量(len map結(jié)構(gòu) map結(jié)構(gòu)也經(jīng)常常用,它和php中的array()幾乎一模一樣,是一個(gè)key-value的hash結(jié)構(gòu)。key可以是除了func類(lèi)型,array,slice,map類(lèi)型之外的類(lèi)型。 它的使用也是非常簡(jiǎn)單 m:=map[string]string{} m["key1"] = "val1" map結(jié)構(gòu)和slice是一樣的,是一個(gè)指針。賦值的時(shí)候是將指針復(fù)制給新的變量 map的增刪改查操作是這樣
名稱(chēng)欄目:Go語(yǔ)言中的_array、slice和map
本文地址:http://www.dlmjj.cn/article/djghgjd.html


咨詢(xún)
建站咨詢(xún)
