陣列、切片、Map知識點分享
一、陣列
1、定義: var 陣列名 [陣列大小] 陣列型別 eg:var arr [11]int (定于一個名字為arr的整型陣列大小為11)
2、賦值:以arr為例,arr[0]=1;
3、陣列的記憶體布局
&arr可以獲得arr的陣列地址,陣列中第一個元素的地址就是陣列的地址,之后的陣列地址根據陣列的型別決定,比如假如是int32型別陣列,第二個元素地址遞增4個位元組,
順便說一下型別所占位元組數(參考https://blog.csdn.net/lucky404/article/details/103717224)
int8: 8位,就是一個位元組
int16: 2個位元組
int32: 4個位元組
int64:8個位元組)
float32: 4個位元組
float64: 8 個位元組
string
英文的ascii的string 1個英文字符或英文標點占1byte
中文的string 一個文字占用 3 byte
bool: 占用1byte
記憶體分析圖:

如上圖所示,定義了一個int32的整形陣列(int64的所占位元組大小是8個位元組),可以由圖看出intArr[0]的地址是0XC04204A0A0(第一個元素的地址也是陣列的地址),所以第二個元素的地址是首地址+8(位元組大小,以16進制運算),所以第二個元素的地址是0XC04204A0A8,同理可以推出后面元素的地址,
4、陣列的注意事項
1)型別:值型別,只能進行值拷貝,如果想在其他函式中改變陣列,需要使用參考傳遞(指標)
2)Go語言中陣列具有默認值,int型別是0,string 是"",Bool是false
二、切片
1、定義:var 切片名字 [] 切片型別 eg:var slice []int 定義一個整型切片
2、型別:切片是參考型別,所以切片是參考傳遞

如圖所示,切片本質上是一個Struct結構體,第一個元素儲存地址,第二個儲存長度,第三個儲存容量
type slice struct {
ptr *[2]int
len int
cap int
}
3、切片的使用
1)由于切片是參考型別,需要自己分配記憶體,所以需要make來創建切片;
var 切片名 [] 切片型別 =make([]切片型別,len,cap) //如果分配了cap一定比len大
var slice []int=make ([]int,4,5) //定義一個切片并且分配記憶體
2)使用陣列直接賦值時候,var slice =arr[startIndex,endIndex]不包含endIndex;
3)切片可以繼續切片,eg:slice:=slice[1:3];
4) Append函式
使用方法:slice=append(slice,添加元素)
添加原理:
使用Append添加切片時,會新建一個Arr切片(滿足擴容后的大小條件),然后在重新把slice拷貝到Arr,然后再參考到slice中,完成切片擴容,
5)copy(slice1,slice2)將slice2拷貝給slice1,修改slice1的值不影響slice2
6)string 自身就是一個byte切片;
三、Map
1、定義 :var 變數名 map [keytype] valuetype eg:var mapTest map[int] string上述定義了一個key為int型別,value為string型別的map;
2、注意事項:
1)Slice,Map,Function不能作為key來使用;
2)map的宣告不能分配記憶體,分配記憶體后才能進行使用;
記憶體分配示例:
var map1 map[int] string
map1=make(map1[int]string,4) //給map1分配空間
//第二種方式定義
map1:=make(map1[int]string,4)
3)map的增刪改查
增加,修改:
map["key"]="value"
//當key值不存在就增加,當key值存在就修改
洗掉:
delete(map,"key") //洗掉map中的key鍵值的value資訊
查詢:
val,ok:=map["查詢的鍵值對"]
if ok{
fmt.Println(val)
}else{
fmt.Println("沒有鍵值對的key值")
}
遍歷:
var map1 map[int]int
map1=make(map1[int]int,4)
map1[0]=0
map1[1]=1
map1[2]=2
map1[3]=3
for i,v :=range map1{
fmt.Println("map1的第%d位的值是%d",i,v)
}
4)map切片的使用
var slice []map[int]string //定義map切片
5)map是參考型別,采用參考傳遞
如果大家看完對自己有些許幫助,請點贊支持,謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/262973.html
標籤:區塊鏈
下一篇:資料結構 --興趣型別多圖示記①
