十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
1、List接口?繼承collection接口,Map是個頂級接口
“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)公司的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個不僅審美在線,而且實用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)頁設(shè)計、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無止境。
2、List此接口的用戶可以對列表中每個元素的插入位置進行精確地控制。
用戶可以根據(jù)元素的整數(shù)??索引(在列表中的位置)訪問元素,并搜索列表中的元素
3.map將鍵映射到值的對象。一個映射不能包含重復(fù)的鍵;每個鍵最多只能映射到一個值
簡單的說就是list只能保存一列表;Mapk,v能保存2列表
list的?繼承關(guān)系
Map的繼承關(guān)系
可以先轉(zhuǎn)成json,再反序列化成定義好的結(jié)構(gòu)體
也可以for循環(huán)自己處理
1、意思不同
list:目錄;名單;明細(xì)表;條紋;傾斜;<古>意向
map:地圖;繪制地圖;計劃
2、用法不同
list:用作名詞時,其意思是“一覽表,目錄,名單,清單”,是可數(shù)名詞,常用于a list of短語中。
map:用作名詞的基本意思是“地圖”,特指“地球表面或一陸地的圖”,表示某些地方的地理位置、形狀、大小等,還可作“天體圖”解,是可數(shù)名詞。
3、來源不同
list:直接源自法語的liste;最初源自古意大利語的lista,意為名單,名冊,表。
map:16世紀(jì)20年代進入英語,直接源自中古法語的mappa,意為布。
衍生類型,interface{} , map, [] ,struct等
map類似于java的hashmap,python的dict,php的hash array。
常規(guī)的for循環(huán),可以用for k,v :=range m {}. 但在下面清空有一個坑注意:
著名的map[string]*struct 副本問題
結(jié)果:
Go 中不存在引用傳遞,所有的參數(shù)傳遞都是值傳遞,而map是等同于指針類型的,所以在把map變量傳遞給函數(shù)時,函數(shù)對map的修改,也會實質(zhì)改變map的值。
slice類似于其他語言的數(shù)組(list,array),slice初始化和map一樣,這里不在重復(fù)
除了Pointer數(shù)組外,len表示使用長度,cap是總?cè)萘?,make([]int, len, cap)可以預(yù)申請 比較大的容量,這樣可以減少容量拓展的消耗,前提是要用到。
cap是計算切片容量,len是計算變量長度的,兩者不一樣。具體例子如下:
結(jié)果:
分析:cap是計算當(dāng)前slice已分配的容量大小,采用的是預(yù)分配的伙伴算法(當(dāng)容量滿時,拓展分配一倍的容量)。
append是slice非常常用的函數(shù),用于添加數(shù)據(jù)到slice中,但如果使用不好,會有下面的問題:
預(yù)期是[1 2 3 4 5 6 7 8 9 10], [1 2 3 4 5 6 7 8 9 10 11 12],但實際結(jié)果是:
注意slice是值傳遞,修改一下:
輸出如下:
== 只能用于判斷常規(guī)數(shù)據(jù)類型,無法使用用于slice和map判斷,用于判斷map和slice可以使用reflect.DeepEqual,這個函數(shù)用了遞歸來判斷每層的k,v是否一致。
當(dāng)然還有其他方式,比如轉(zhuǎn)換成json,但小心有一些異常的bug,比如html編碼,具體這個json問題,待后面在分析。