激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Golang - Golang學(xué)習(xí)筆記(四):array、slice、map

Golang學(xué)習(xí)筆記(四):array、slice、map

2020-04-26 11:01腳本之家 Golang

這篇文章主要介紹了Golang學(xué)習(xí)筆記(四):array、slice、map,本文分別講解了這3個(gè)類型的聲明&賦值、元素訪問、其它操作,需要的朋友可以參考下

一.Array

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

所有的值類型變量在賦值和作為參數(shù)傳遞時(shí)都將產(chǎn)生一個(gè)復(fù)制動(dòng)作

如果作為函數(shù)的參數(shù)類型,則在函數(shù)調(diào)用時(shí)參數(shù)發(fā)生數(shù)據(jù)復(fù)制,在函數(shù)體中無法修改傳入數(shù)組的內(nèi)容

數(shù)組相等用 = != 比較,不能用 < >

1.聲明&賦值

初始化

語法

復(fù)制代碼 代碼如下:


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} //前三個(gè)元素,其他為0
c := [20]int{19:1} //第20個(gè)元素初始化為1,其他默認(rèn)0
d := [...]int{4,5,6} //自動(dòng)計(jì)算長(zhǎng)度
e := [...]int{0:1, 1:2, 19:3} //自動(dòng)推斷

 

二維數(shù)組

復(fù)制代碼 代碼如下:

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] 前者可推斷,但是后者必須顯示賦值
數(shù)組的長(zhǎng)度是該數(shù)組類型的一個(gè)內(nèi)置常量

 

arrLength := len(arr)
注意,數(shù)組長(zhǎng)度也是類型的一部分,因此不同長(zhǎng)度數(shù)組為不同類型(內(nèi)置常量)

即[3]int和[4]int是不同類型,并且數(shù)組不能改變長(zhǎng)度

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

2.元素訪問

復(fù)制代碼 代碼如下:


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

 

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


可以用new創(chuàng)建數(shù)組

復(fù)制代碼 代碼如下:

p := new([10]int)


返回一個(gè)指向數(shù)組的指針
注意區(qū)分

 

指向數(shù)組的指針

復(fù)制代碼 代碼如下:

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


指針數(shù)組

復(fù)制代碼 代碼如下:

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

 

二.Slice

數(shù)組切片就像一個(gè)指向數(shù)組的指針,但更復(fù)雜,實(shí)際上它擁有自己的數(shù)據(jù)結(jié)構(gòu),而不僅僅是指針(指向原生數(shù)組的指針 + 數(shù)組切片中元素個(gè)數(shù) + 數(shù)組切片已分配的存儲(chǔ)空間)

一個(gè)引用類型,總是指向一個(gè)底層array,聲明可以向array一樣,只是不需要長(zhǎng)度

slice就像一個(gè)結(jié)構(gòu)體,包含三個(gè)元素

一個(gè)指針,指向數(shù)組中slice指定的開始位置
長(zhǎng)度,即slice的長(zhǎng)度
最大長(zhǎng)度,也就是slice開始位置到數(shù)組的最后位置的長(zhǎng)度
1.聲明&賦值

通過array創(chuàng)建

復(fù)制代碼 代碼如下:


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:]


從數(shù)組或已存在的slice再次聲明

復(fù)制代碼 代碼如下:


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]


直接創(chuàng)建

復(fù)制代碼 代碼如下:

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

 

2.元素訪問

復(fù)制代碼 代碼如下:


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

 

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

 

3.其他操作

大小和容量

len獲取slice的長(zhǎng)度
cap獲取slice的最大容量

動(dòng)態(tài)增減元素

復(fù)制代碼 代碼如下:


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

 

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

注意,append會(huì)改變slice所引用的數(shù)組的內(nèi)容,從而影響到引用統(tǒng)一數(shù)組的其他slice,
     但當(dāng)slice中沒有剩余空間,此時(shí)動(dòng)態(tài)分配新的數(shù)組空間返回的slice數(shù)組指針將指向這個(gè)空間,
     而原數(shù)組的內(nèi)容將保持不變,其他引用此數(shù)組的slice不受影響(坑,可能引入bug)

 

內(nèi)容復(fù)制

復(fù)制代碼 代碼如下:


copy,從源slice的src中復(fù)制到目標(biāo)dst,并且返回復(fù)制元素的個(gè)數(shù)
copy(dst, source) //會(huì)按短的個(gè)數(shù)復(fù)制

 

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

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

 

切片

復(fù)制代碼 代碼如下:

默認(rèn)開始位置0,ar[:n]等價(jià)于ar[0:n]
第二個(gè)序列默認(rèn)是數(shù)組長(zhǎng)度 ar[n:] 等價(jià)于 ar[n:len(ar)]
從一個(gè)數(shù)組直接獲取slice,可以是ar[:]


slice是引用類型,所以當(dāng)改變其中元素的時(shí)候,其他的所有引用都會(huì)改變

復(fù)制代碼 代碼如下:

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

 

三.Map

Python中字典的概念

map是無序的,長(zhǎng)度不固定,內(nèi)置的len可以用于map,可以方便的修改

1.聲明&賦值

復(fù)制代碼 代碼如下:


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


初始化一個(gè)字典

 

2.元素訪問

復(fù)制代碼 代碼如下:


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.基本操作

 

賦值

復(fù)制代碼 代碼如下:

m["1234"] = PersonInfo{}


刪除

復(fù)制代碼 代碼如下:

delete(m, "1234")

 

四.其他

make和new操作

復(fù)制代碼 代碼如下:


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

 

new用于各種類型的內(nèi)存分配

 

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

make(T, args),只能創(chuàng)建slice,map,channel,并返回一個(gè)有初始值(非零值)的T類型,而不是*T。 本質(zhì)來講,導(dǎo)致這三個(gè)類型有所不同的原因是,指向數(shù)據(jù)結(jié)構(gòu)的引用在使用前必須被初始化

延伸 · 閱讀

精彩推薦
  • Golanggolang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    helight2992020-05-14
  • Golanggo日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • GolangGolang通脈之?dāng)?shù)據(jù)類型詳情

    Golang通脈之?dāng)?shù)據(jù)類型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類型,在編程語言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語言中標(biāo)識(shí)符允許由...

    4272021-11-24
  • Golanggolang如何使用struct的tag屬性的詳細(xì)介紹

    golang如何使用struct的tag屬性的詳細(xì)介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細(xì)介紹,從例子說起,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看...

    Go語言中文網(wǎng)11352020-05-21
  • GolangGolang中Bit數(shù)組的實(shí)現(xiàn)方式

    Golang中Bit數(shù)組的實(shí)現(xiàn)方式

    這篇文章主要介紹了Golang中Bit數(shù)組的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    天易獨(dú)尊11682021-06-09
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
主站蜘蛛池模板: 免费一级高清毛片 | 日本在线观看一区二区 | 日韩视频在线一区二区三区 | 国产不卡av在线 | 国产91精品久久久久久久 | 欧美成人高清在线 | 久久福利小视频 | 国产小视频在线 | 黄网站在线播放视频免费观看 | 久久久精品视频在线观看 | 天天夜夜草 | 国产精品9191 | 97中文字幕在线观看 | 999插插插| 国产精品视频专区 | 黄色的视频在线观看 | 九色在线78m | 最污网站 | 在线免费黄色网 | avlululu| 日本欧美中文字幕 | 毛片国产 | 欧美精品黄色 | 黄色片免费在线播放 | 欧美极品免费 | 91性高湖久久久久久久久网站 | www.狠狠操.com| 日本一级毛片在线播放 | 91精品国产91久久久久久丝袜 | 亚洲αv | 欧美成人午夜影院 | 国产毛片自拍 | 毛片视频播放 | 九九热在线免费观看视频 | 亚欧在线免费观看 | 国产一级一国产一级毛片 | 亚洲精品久久久久久下一站 | 精品成人国产在线观看男人呻吟 | 一级黄色免费观看视频 | 黑人一区二区三区四区五区 | 国产精品免费观在线 |