Golang基礎(chǔ)(三)——復(fù)雜類(lèi)型
@([07] golang)[Go總結(jié)]
[TOC]
指針
定義
指針變量可以指向任何一個(gè)值的內(nèi)存地址税肪。
聲明
var var_name *var-type
var p *int
類(lèi)型*T
是指向類(lèi)型T的值的指針涌献。零值為nil
指針的使用
使用流程
- 定義指針變量。
- 為指針變量賦值填大。
- 訪問(wèn)指針變量中指向地址的值戒洼。
在一個(gè)變量前加
&
號(hào)來(lái)獲取變量的內(nèi)存地址。
在指針類(lèi)型前面加*
號(hào)來(lái)獲取指針?biāo)赶虻膬?nèi)容允华。
如果在一個(gè)指針類(lèi)型的變量前面加&號(hào)圈浇,就會(huì)得到一個(gè)新的內(nèi)存地址(指針),這個(gè)新的指針指向的是另一個(gè)指針靴寂,則稱(chēng)這個(gè)指針變量為指向指針的指針變量磷蜀。
訪問(wèn)指向指針的指針變量值需要加兩個(gè)*號(hào)。
結(jié)構(gòu)體
定義:結(jié)構(gòu)體是一個(gè)字段的集合
結(jié)構(gòu)體字段使用點(diǎn)號(hào)訪問(wèn)
數(shù)組
slice (切片)
slice會(huì)指向一個(gè)序列的值百炬,并且包含長(zhǎng)度信息蠕搜。
[ ]T 是一個(gè)元素類(lèi)型為T(mén)的切片
p := []int{2, 3, 5, 7, 11, 13}
切片的定義
var identifier [] type
- 通過(guò)make()函數(shù)定義
var slice1 []type = make([]type,len)
,其中l(wèi)en代表切片初始長(zhǎng)度。 - 指定切片容量
make[]T,length,capacity
slice截取
slice可以重新截取收壕,創(chuàng)建一個(gè)新的slice值指向相同的數(shù)組。
s[l:h]
表示從數(shù)組的l到h-1的slice元素轨蛤。注意:包含左側(cè)l
,但不包含右側(cè) h
如果缺省下限則默認(rèn)下限為0蜜宪。即 s[:h]
等于 s[0:h]
如果缺省上限則默認(rèn)上限為切片長(zhǎng)度。即s[l:]
等于 s[l:len(s)]
slice相關(guān)函數(shù)
len() 函數(shù)
獲取切片長(zhǎng)度
cap()函數(shù)
獲取切片容量
append() 函數(shù)
向切片追加新元素
copy()函數(shù)
拷貝切片
map
map 是一種無(wú)序的鍵值對(duì)的集合祥山,key-value形式圃验。
map是通過(guò)hash表實(shí)現(xiàn)的。
map在使用之前必須用make來(lái)創(chuàng)建(不是new);
值為nil的map是空的缝呕,且不能賦值
- 修改map m的一個(gè)元素或者向map m中插入一個(gè)元素
m[key] = elem
- 獲取map m中的一個(gè)元素
elem = m[key]
- 刪除元素
delete(m,key)
- 檢測(cè)某個(gè)鍵是否存在
elem, ok := m[key]
如果key在m中ok為true澳窑,elem為key對(duì)應(yīng)的value;否則供常,ok為false摊聋,elem為nil
Range關(guān)鍵字
range用于for循環(huán)中迭代數(shù)組、切片栈暇、鏈表或集合的元素麻裁。
在數(shù)組和切片中返回元素索引,元素值
,在集合中返回key