上一篇文章?主要學(xué)習(xí)了Go語言的結(jié)構(gòu)體以及結(jié)構(gòu)體指針殿雪,本篇文章主要學(xué)習(xí)Go語言的切片以及Map亲茅。
Go語言數(shù)組的長度不可改變麸拄,但是這在一些特定場景中就不太適用星著,比如我們現(xiàn)在有一款電商商品氛悬,想統(tǒng)計用戶的消費記錄(每個用戶的消費記錄可能不一樣饲鄙,有的一天幾十單有的一個季度就幾單)Go語言團(tuán)隊基于此中提供了相較于一種靈活,功能強(qiáng)悍的內(nèi)置類型切片("也稱動態(tài)數(shù)組"圆雁,這個可以理解為Java的List)。
與數(shù)組相比切片的長度是不固定的帆谍,可以追加元素伪朽,在追加時可能使切片的容量增大。
如何定義切片汛蝙?
var 切片變量名 [ ] 數(shù)據(jù)類型 = make([ ] 數(shù)據(jù)類型, len)
也可以簡寫為 切片變量名 := make([ ] 數(shù)據(jù)類型, len)
或者直接:切片變量名? := [ ] 數(shù)據(jù)類型 { 1,2,3 }
我們可以通過切片的索引獲取新的切片:
其中 紅色矩形內(nèi)的代碼 是通過我們定義好的切片烈涮,然后使用 s[0:3]? 獲取新的切片。這里的0代表的是startIndex 也就是切片的開始索引窖剑;3代表的是endIndex坚洽,也就是結(jié)束索引
len() 和 cap() 函數(shù)
切片是可索引的,可以通過 len() 方法獲取長度西土。
切片提供了計算容量的方法 cap() 可以測量切片最長可以達(dá)到多少讶舰。
append() 和 copy() 函數(shù)
既然切片的長度是不固定的,那么它肯定有添加元素的方法需了。Go語言中跳昼,切片添加元素的方法是使用 append( )。
另外肋乍,切片也是允許拷貝的鹅颊,拷貝切片使用的方法是copy( )。
下面的代碼墓造,首先初始化一個空切片堪伍,然后對切片的元素進(jìn)行添加 然后copy到新的切片,最后打印切片屬性值觅闽。
如何遍歷切片帝雇?
簡單介紹完了切片,下面學(xué)習(xí)GO語言的Map(類似于Java中的Map谱煤,一個key對應(yīng)一個value)
Map 是一種無序的鍵值對集合摊求。Map最重要的一點是通過 key 來快速檢索數(shù)據(jù),key 類似于索引,指向數(shù)據(jù)的值室叉。但是睹栖,Map 是無序的,我們無法決定它的返回順序茧痕,這是因為 Map 是使用 hash 表來實現(xiàn)的野来。
如何定義 Map?以下兩種方式都可以
可以使用內(nèi)建函數(shù) make :var map_變量名 map[key_數(shù)據(jù)類型]value數(shù)據(jù)類型
也可以使用 map 關(guān)鍵字來定義 :? 變量名 := make(map[key_數(shù)據(jù)類型]value數(shù)據(jù)類型)
以下代碼是Map初始化的兩種寫法以及向Map添加元素踪旷,根據(jù)key刪除元素
如何遍歷Map曼氛?遍歷Map可以使用range關(guān)鍵字 進(jìn)行遍歷 代碼如下:
本篇文章主要學(xué)習(xí)的是Go語言的切片和Map,切片本質(zhì)就是一個長度不確定的動態(tài)數(shù)組令野,類似于Java的List舀患;而Map也類似于Java中的Map,屬于key - value 對應(yīng)的結(jié)構(gòu)模式。計算機(jī)語言的互通性體現(xiàn)在方方面面气破,一些思想都是互通與傳承的聊浅。
如果這篇文章對您有開發(fā)or學(xué)習(xí)上的些許幫助,希望各位看官留下寶貴的star现使,謝謝低匙。
Ps:著作權(quán)歸作者所有,轉(zhuǎn)載請注明作者, 商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處(開頭或結(jié)尾請?zhí)砑愚D(zhuǎn)載出處碳锈,添加原文url地址),文章請勿濫用,也希望大家尊重筆者的勞動成果