日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Golang中的Map和Slice的操作技巧
Golang中的Map和Slice是兩種常用的數(shù)據(jù)結(jié)構(gòu)。Map是一種鍵值對(duì)映射的數(shù)據(jù)結(jié)構(gòu),而Slice是一個(gè)動(dòng)態(tài)數(shù)組。在Go中使用map[key]value的方式定義,其中key可以是任何支持==和!=操作符的類型,value可以是任意類型的值。而Slice則是通過(guò)make函數(shù)創(chuàng)建的,它是一個(gè)動(dòng)態(tài)數(shù)組,可以通過(guò)索引訪問(wèn)其中的元素。

Golang中的Map

1、1 Map簡(jiǎn)介

企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對(duì)外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來(lái)巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),創(chuàng)新互聯(lián)建站面向各種領(lǐng)域:木托盤成都網(wǎng)站設(shè)計(jì)、成都全網(wǎng)營(yíng)銷推廣解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。


Map是Golang中一種特殊的數(shù)據(jù)結(jié)構(gòu),它是一個(gè)鍵值對(duì)的集合,在Golang中,Map使用map[keyType]valueType的形式定義,其中keyTypevalueType分別表示鍵和值的類型,我們可以定義一個(gè)String到int類型的Map:

m := make(map[string]int)

1、2 Map的創(chuàng)建

我們可以使用以下幾種方式創(chuàng)建Map:

使用make函數(shù)創(chuàng)建空Map:

m := make(map[string]int)

直接指定鍵值對(duì)初始化Map:

m := map[string]int{"apple": 1, "banana": 2}

使用字面量初始化Map:

m := map[string]int{"apple": 1, "banana": 2, "orange": 3}

1、3 Map的常用操作

添加鍵值對(duì):

m["apple"] = 100

獲取鍵對(duì)應(yīng)的值:

value := m["apple"]

刪除鍵值對(duì):

delete(m, "apple")

判斷鍵是否存在:

value, ok := m["apple"]
if ok {
    fmt.Println("存在")
} else {
    fmt.Println("不存在")
}

遍歷Map:

for key, value := range m {
    fmt.Println("key:", key, "value:", value)
}

Golang中的Slice

2、1 Slice簡(jiǎn)介

Slice是Golang中一種特殊的數(shù)據(jù)結(jié)構(gòu),它是一個(gè)有序的、動(dòng)態(tài)大小的數(shù)據(jù)集合,在Golang中,Slice使用[]interface{}或者[]T的形式定義,]interface{}表示任意類型的切片,[]T表示固定類型的切片,我們可以定義一個(gè)Int類型的Slice:

slice := []int{1, 2, 3}

2、2 Slice的創(chuàng)建與初始化

我們可以使用以下幾種方式創(chuàng)建Slice:

使用make函數(shù)創(chuàng)建空Slice:

slice := make([]int, 0) // 長(zhǎng)度為0的空Slice,底層存儲(chǔ)空間為cap(0)*elemSize(0),容量為0,實(shí)際存儲(chǔ)空間為0字節(jié);如果不指定長(zhǎng)度參數(shù),默認(rèn)長(zhǎng)度為0,當(dāng)元素被添加到slice時(shí),底層會(huì)重新分配內(nèi)存空間,如果需要頻繁地添加或刪除元素,建議使用make創(chuàng)建slice時(shí)指定其容量。slice := make([]int, 5),表示創(chuàng)建一個(gè)長(zhǎng)度為5的空Slice,由于底層存儲(chǔ)空間未分配,因此實(shí)際存儲(chǔ)空間仍為0字節(jié),當(dāng)添加第一個(gè)元素后,底層存儲(chǔ)空間的大小將變?yōu)?*elemSize(4),后續(xù)添加元素時(shí),底層存儲(chǔ)空間會(huì)根據(jù)當(dāng)前元素個(gè)數(shù)自動(dòng)擴(kuò)容,如果需要指定初始容量和容量增長(zhǎng)因子等參數(shù),可以使用如下形式:slice := make([]int, initialCap, growthFactor),其中initialCap表示初始容量,growthFactor表示容量增長(zhǎng)因子。slice := make([]int, 5, 1.5),表示創(chuàng)建一個(gè)長(zhǎng)度為5的Slice,容量增長(zhǎng)因子為1.5,當(dāng)添加第6個(gè)元素時(shí),底層存儲(chǔ)空間的大小將變?yōu)?*elemSize(4)+1(擴(kuò)容空間),擴(kuò)容后的底層存儲(chǔ)空間大小為5*elemSize(4)+1,同理,后續(xù)添加元素時(shí),底層存儲(chǔ)空間會(huì)根據(jù)當(dāng)前元素個(gè)數(shù)自動(dòng)擴(kuò)容,如果需要指定初始容量、容量增長(zhǎng)因子以及底層存儲(chǔ)空間大小等參數(shù),可以使用如下形式:slice := make([]int, initialCap, growthFactor, capacity),其中capacity表示底層存儲(chǔ)空間大小。slice := make([]int, 5, 1.5, 64),表示創(chuàng)建一個(gè)長(zhǎng)度為5的Slice,容量增長(zhǎng)因子為1.5,底層存儲(chǔ)空間大小為64字節(jié),需要注意的是,當(dāng)?shù)讓哟鎯?chǔ)空間大小不足以容納新元素時(shí),會(huì)觸發(fā)一次realloc操作進(jìn)行擴(kuò)容,如果不需要指定底層存儲(chǔ)空間大小等參數(shù),可以使用如下形式:slice := make([]int),表示創(chuàng)建一個(gè)長(zhǎng)度為0的空Slice,由于底層存儲(chǔ)空間未分配,因此實(shí)際存儲(chǔ)空間仍為0字節(jié),當(dāng)添加第一個(gè)元素后,底層存儲(chǔ)空間的大小將變?yōu)閘en(slice)*elemSize(4),后續(xù)添加元素時(shí),底層存儲(chǔ)空間會(huì)根據(jù)當(dāng)前元素個(gè)數(shù)自動(dòng)擴(kuò)容,當(dāng)添加第n個(gè)元素時(shí),底層存儲(chǔ)空間的大小將變?yōu)閘en(slice)*elemSize(4)+n*elemSize(4)(擴(kuò)容空間),擴(kuò)容后的底層存儲(chǔ)空間大小為len(slice)*elemSize(4)+n*elemSize(4),同理,后續(xù)添加元素時(shí),底層存儲(chǔ)空間會(huì)根據(jù)當(dāng)前元素個(gè)數(shù)自動(dòng)擴(kuò)容,如果需要指定初始容量、容量增長(zhǎng)因子以及底層存儲(chǔ)空間大小等參數(shù),可以使用如下形式:slice := make([]int, initialCap, growthFactor),其中initialCap表示初始容量,growthFactor表示容量增長(zhǎng)因子。slice := make([]int, 5, 1.5),表示創(chuàng)建一個(gè)長(zhǎng)度為5的Slice,容量增長(zhǎng)因子為1.5,當(dāng)添加第6個(gè)元素時(shí),底層存儲(chǔ)空間的大小將變?yōu)?*elemSize(4)+1(擴(kuò)容空間),擴(kuò)容后的底層存儲(chǔ)空間大小為5*elemSize(4)+1,同理,后續(xù)添加元素時(shí),底層存儲(chǔ)空間會(huì)根據(jù)當(dāng)前元素個(gè)數(shù)自動(dòng)擴(kuò)容,如果需要指定初始容量、容量增長(zhǎng)因子以及底層存儲(chǔ)空間大小等參數(shù),可以使用如下形式:slice := make([]int, initialCap, growthFactor),其中initialCap表示初始容量,growthFactor表示容量增長(zhǎng)因子。slice := make([]int, 5, 1.5),表示創(chuàng)建一個(gè)長(zhǎng)度為5的Slice,容量增長(zhǎng)因子為1.5,當(dāng)添加第6個(gè)元素時(shí),底層存儲(chǔ)空間的大小將變?yōu)?*elemSize(4)+1(擴(kuò)容空間),擴(kuò)容后的底層存儲(chǔ)空間大小為5*elemSize(4)+1,同理,后續(xù)添加元素時(shí),底層存儲(chǔ)空間會(huì)根據(jù)當(dāng)前元素個(gè)數(shù)自動(dòng)擴(kuò)容,如果需要指定初始容量、容量增長(zhǎng)因子以及底層存儲(chǔ)空間大小等參數(shù),可以使用如下形式:slice := make([]int),表示創(chuàng)建一個(gè)長(zhǎng)度為0的空Slice,由于底層存儲(chǔ)空間未分配,因此實(shí)際存儲(chǔ)空間仍為0字節(jié),當(dāng)添加第一個(gè)元素后,底層存儲(chǔ)空間的大小將變?yōu)閘en(slice)*elemSize(4),后續(xù)添加元素時(shí),底層存儲(chǔ)空間會(huì)根據(jù)當(dāng)前元素個(gè)數(shù)自動(dòng)擴(kuò)容,當(dāng)添加第n個(gè)元素時(shí),底層存儲(chǔ)空間的大小將變?yōu)閘en(slice)*elemSize(4)+n*elemSize(4)(擴(kuò)容空間),擴(kuò)容后的底層存儲(chǔ)空間大小為len(slice)*elemSize(4)+n*elemSize(4),同理,后續(xù)添加元素時(shí),底層存儲(chǔ)空間會(huì)根據(jù)當(dāng)前元素個(gè)數(shù)自動(dòng)擴(kuò)容,如果需要指定初始容量、容量增長(zhǎng)因子以及底層存儲(chǔ)空間大小等參數(shù),可以使用如下形式:slice := make([]*T)(cap(*T)),T表示任意類型。slice := make([]*int)(cap(*int)),表示創(chuàng)建一個(gè)長(zhǎng)度為cap(*int)的Slice,底層存儲(chǔ)類型為int,注意:由于底層類型不確定且動(dòng)態(tài)變化,因此該方法無(wú)法保證創(chuàng)建出的Slice具有正確的類型信息,因此建議在創(chuàng)建Slice時(shí)指定其類型信息。slice := make([]*float64](len), cap(*float64)),表示創(chuàng)建一個(gè)長(zhǎng)度為len、容量為cap的Float64類型的Slice,其中l(wèi)en表示Slice的初始長(zhǎng)度,需要注意的是:由于Slice是一種引用類型而不是值類型,因此在使用make函數(shù)創(chuàng)建Slice時(shí)需要注意其返回值是一個(gè)指向內(nèi)部數(shù)據(jù)的指針而非實(shí)際的Slice對(duì)象本身,因此在使用完Slice后應(yīng)及時(shí)將其置為nil以釋放內(nèi)存資源:defer slice.Close() 或者 defer func() { slice = nil }(),否則可能導(dǎo)致內(nèi)存泄漏等問(wèn)題,另外需要注意的是:由于Slice是一種引用類型而不是值類型

文章標(biāo)題:Golang中的Map和Slice的操作技巧
網(wǎng)頁(yè)路徑:http://www.dlmjj.cn/article/dhhohpc.html