亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

Golang學習筆記(四):array、slice、map

2020-04-01 19:14:21
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Golang學習筆記(四):array、slice、map,本文分別講解了這3個類型的聲明&賦值、元素訪問、其它操作,需要的朋友可以參考下
 

一.Array

在Go語言中,數組是一個值類型(value type)

所有的值類型變量在賦值和作為參數傳遞時都將產生一個復制動作

如果作為函數的參數類型,則在函數調用時參數發生數據復制,在函數體中無法修改傳入數組的內容

數組相等用 = != 比較,不能用 < >

1.聲明&賦值

初始化

語法

復制代碼代碼如下:

var VarName [n]type     // n>=0

 

e.g.
var a [5]int //[0 0 0 0 0]
var c [2][3]int //二維

var b int = [5]int{1,2,3,4,5} //聲明并初始化

a := [3]int{1,2,3}
b := [10]int{1,2,3} //前三個元素,其他為0
c := [20]int{19:1} //第20個元素初始化為1,其他默認0
d := [...]int{4,5,6} //自動計算長度
e := [...]int{0:1, 1:2, 19:3} //自動推斷

 

二維數組

復制代碼代碼如下:

doubleArray := [2][4]int{[4]int{1,2,3,4}, [4]int{5,6,7,8}}
easyArray := [2][4]int{{1,2,3,4}, {1,2,3,4}}

多維 [...][n] 前者可推斷,但是后者必須顯示賦值
數組的長度是該數組類型的一個內置常量

 

arrLength := len(arr)
注意,數組長度也是類型的一部分,因此不同長度數組為不同類型(內置常量)

即[3]int和[4]int是不同類型,并且數組不能改變長度

數組之間的賦值是值的賦值,即當把一個數組作為參數傳入函數的時候,傳入的其實是該數組的副本(一次復制操作),而不是它的指針,如果要傳入指針,使用slice

2.元素訪問

復制代碼代碼如下:

for i:=0; i < len(array); i++ {
    fmt.Println(i, array[i])
}

 

for i, v := range array {
    fmt.Println(i, v)
}


可以用new創建數組
復制代碼代碼如下:

p := new([10]int)

返回一個指向數組的指針
注意區分

 

指向數組的指針

復制代碼代碼如下:

a := [100]int{}
var p *[100]int = &a

指針數組
復制代碼代碼如下:

x, y = 1, 2
a := [...]*int{&x, &y}

 

二.Slice

數組切片就像一個指向數組的指針,但更復雜,實際上它擁有自己的數據結構,而不僅僅是指針(指向原生數組的指針 + 數組切片中元素個數 + 數組切片已分配的存儲空間)

一個引用類型,總是指向一個底層array,聲明可以向array一樣,只是不需要長度

slice就像一個結構體,包含三個元素

一個指針,指向數組中slice指定的開始位置
長度,即slice的長度
最大長度,也就是slice開始位置到數組的最后位置的長度
1.聲明&賦值

通過array創建

復制代碼代碼如下:

var myArray [10]int = [10]int{1,2,3,4,5,6,7,8,9,10}
var mySlice []int = myArray[:5]

 

a := [5]int{1,2,3,4,5}
b := a[2:4]
b := a[:4]
b := a[2:]


從數組或已存在的slice再次聲明
復制代碼代碼如下:

var ar [10]byte {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}

 

var a, b []byte
a = ar[2:5]
b = ar[3:5]


直接創建
復制代碼代碼如下:

myslice1 := make([]int, 5)
myslice2 := make([]int, 5, 10) //初始個數5,預留10個元素的存儲空間
myslice3 := []int{1,2,3,4,5}

 

2.元素訪問

復制代碼代碼如下:

for i:=0; i<len(mySlice); i++ {
    fmt.Println(i, mySlice[i])
}

 

for i, v := range mySlice {
    fmt.Println(i, v)
}

 

3.其他操作

大小和容量

len獲取slice的長度
cap獲取slice的最大容量

動態增減元素

復制代碼代碼如下:

append想slice里面追加一個或者多個元素,然后返回一個和slice一樣類型的slice

 

//append
mySlice = append(mySlice, 1, 2, 3) //增加三個元素
mySlice = append(mySlice, mySlice2) //增加另一個

注意,append會改變slice所引用的數組的內容,從而影響到引用統一數組的其他slice,
     但當slice中沒有剩余空間,此時動態分配新的數組空間返回的slice數組指針將指向這個空間,
     而原數組的內容將保持不變,其他引用此數組的slice不受影響(坑,可能引入bug)

 

內容復制

復制代碼代碼如下:

copy,從源slice的src中復制到目標dst,并且返回復制元素的個數
copy(dst, source) //會按短的個數復制

 

slice1 := []int{1,2,3,4,5}
slice2 := []int{5,4,3}

copy(slice2, slice1) //復制slice1前三個 1 -> 2
copy(slice1, slice2) //復制slice2的前三個 2 -> 1

 

切片

復制代碼代碼如下:

默認開始位置0,ar[:n]等價于ar[0:n]
第二個序列默認是數組長度 ar[n:] 等價于 ar[n:len(ar)]
從一個數組直接獲取slice,可以是ar[:]

slice是引用類型,所以當改變其中元素的時候,其他的所有引用都會改變
復制代碼代碼如下:

aSlice = array[3:7]
bslice = aSlice[:3]

 

三.Map

Python中字典的概念

map是無序的,長度不固定,內置的len可以用于map,可以方便的修改

1.聲明&賦值

復制代碼代碼如下:

map[keyType]valueType

 

var m map[string] PersonInfo
m = make(map[string] personInfo[, 100])

var numbers map[string]int
or
numbers := make(map[string]int)
numbers["one"] = 1


初始化一個字典

 

2.元素訪問

復制代碼代碼如下:

rating := map[string]float32 {"c":5, "Go":4.5}

 

csharpRating, ok := rating["C#"]
if ok {
    fmt.Println("get the value")
} else{
    fmt.Println("error")
}


3.基本操作

 

賦值

復制代碼代碼如下:

m["1234"] = PersonInfo{}

刪除
復制代碼代碼如下:

delete(m, "1234")

 

四.其他

make和new操作

復制代碼代碼如下:

make用于內建類型(map,slice,channel) 的內存分配。

 

new用于各種類型的內存分配

 

new本質上和其他語言中同名函數一樣, new(T)分配了零值填充的T類型的內存空間,并返回其地址,即一個*T類型的值 即,返回一個指針,指向新分配的類型T的零值

make(T, args),只能創建slice,map,channel,并返回一個有初始值(非零值)的T類型,而不是*T。 本質來講,導致這三個類型有所不同的原因是,指向數據結構的引用在使用前必須被初始化


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品优优av| 国产精品久久久久久婷婷天堂| 国产精品久久久999| 夜夜躁日日躁狠狠久久88av| 91av国产在线| 欧美激情啊啊啊| 精品国产乱码久久久久酒店| 日韩免费电影在线观看| 久久精品精品电影网| 国产性猛交xxxx免费看久久| 丝袜亚洲另类欧美重口| 欧美亚洲激情视频| 午夜精品三级视频福利| 国产精品一区电影| 一区二区成人精品| 亚洲第一精品夜夜躁人人爽| 欧美视频在线免费| 亚洲区一区二区| 欧美一区二区视频97| 一区二区三区四区在线观看视频| 一区二区欧美日韩视频| 免费成人高清视频| 色香阁99久久精品久久久| 久久久电影免费观看完整版| 国产热re99久久6国产精品| 欧美最猛性xxxxx免费| 中文字幕亚洲无线码在线一区| 国产亚洲人成a一在线v站| 精品色蜜蜜精品视频在线观看| 久久国产精品久久精品| 中文字幕日韩在线观看| 日韩精品欧美激情| 亚洲网站在线看| 亲子乱一区二区三区电影| 国内外成人免费激情在线视频网站| 国产丝袜一区视频在线观看| 亚洲欧美日本精品| 国产一区玩具在线观看| 国产精品美女主播| 国产精品国产三级国产aⅴ浪潮| 成人信息集中地欧美| 欧美一级淫片aaaaaaa视频| 国产精品久久久精品| 久久精品久久久久久国产 免费| 久久精品成人一区二区三区| 亚洲第一中文字幕| 欧美视频在线免费看| 一区二区三区国产视频| 国产精品露脸av在线| 日韩中文在线不卡| 中文字幕在线日韩| 久久夜色精品亚洲噜噜国产mv| 国产精品久久久久久av| 亚洲精品日韩在线| 国内久久久精品| 色偷偷偷综合中文字幕;dd| 欧美日韩一二三四五区| 欧美午夜无遮挡| 亚洲欧美在线一区| 欧美黑人国产人伦爽爽爽| 久久精品国产亚洲精品| 欧美在线观看一区二区三区| 国产免费观看久久黄| 97久久伊人激情网| 国产精品爽黄69| 日韩中文在线观看| 国产精品人成电影在线观看| 欧美色道久久88综合亚洲精品| 亚洲国产精久久久久久| 91香蕉电影院| 亚洲精品aⅴ中文字幕乱码| 精品中文字幕乱| 欧美极品少妇xxxxⅹ免费视频| 久久噜噜噜精品国产亚洲综合| 国产日韩欧美中文在线播放| 亚洲国产欧美在线成人app| 亚洲成人激情视频| 欧美做受高潮1| 亚州国产精品久久久| 亚洲毛片在线免费观看| 欧美黄网免费在线观看| 亚洲美女喷白浆| 在线日韩精品视频| 欧美日韩视频免费播放| 国产九九精品视频| 日韩av三级在线观看| 成人精品久久av网站| 亚洲色图25p| 一区二区三区回区在观看免费视频| 亚洲精品日韩激情在线电影| 色偷偷91综合久久噜噜| 亚洲福利在线播放| 欧美日韩国产va另类| 亚洲国产精品成人av| 欧美乱人伦中文字幕在线| 成人免费看吃奶视频网站| 日韩有码在线观看| 欧美激情手机在线视频| 国产精品嫩草影院一区二区| 成人97在线观看视频| 日韩成人激情视频| 国模精品视频一区二区三区| 黑人巨大精品欧美一区二区三区| 日韩风俗一区 二区| 国产精品亚洲欧美导航| 日本成人免费在线| 久久精品国产欧美亚洲人人爽| 成人激情视频免费在线| 成人黄色在线观看| 精品日韩视频在线观看| 国产色婷婷国产综合在线理论片a| 亚洲美女在线看| 欧美国产日韩xxxxx| 亚洲福利视频免费观看| 亚洲综合在线中文字幕| xxx成人少妇69| 国产精品女视频| 国产午夜精品理论片a级探花| 亚洲第一网站免费视频| 亚洲一区二区免费| 亚洲男人天堂2023| 国产精品视频白浆免费视频| 在线观看国产欧美| 91国产美女在线观看| 日韩欧美成人网| 91精品国产91久久久| 国产精品免费视频久久久| 在线日韩第一页| 国产精品久久999| 亚洲三级 欧美三级| 精品香蕉一区二区三区| 国产成人精品最新| 久久久国产视频| 主播福利视频一区| 国产精品激情av在线播放| 精品久久久久久久久久久| 欧美中文字幕第一页| 国产精品视频网站| 国产成人精品电影久久久| 欧美激情精品久久久久久大尺度| 青青草国产精品一区二区| 精品久久久久久亚洲精品| 久久久久久中文| 亚洲天堂av图片| 9.1国产丝袜在线观看| 亚洲国产精久久久久久| 日韩精品免费在线视频| 欧美精品videos性欧美| 国产精品草莓在线免费观看| 亚洲国产精品久久精品怡红院| 日韩精品在线观看一区| 国产成人精品亚洲精品| 日韩电视剧在线观看免费网站| 69久久夜色精品国产69| 国产一区二区三区在线| 久久精品亚洲国产| 亚洲精品视频免费在线观看| 国产精品久久久久久一区二区| 久久影视电视剧免费网站清宫辞电视| 中文字幕综合在线| 亚洲最大在线视频| 日本久久久a级免费| 91精品中文在线| 亚洲成人久久电影|