乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Go語言入門——數(shù)組、切片和映射

       印度阿三17 2019-05-19

      按照以往開一些專題的風(fēng)格,第一篇一般都是“從HelloWorld開始”

      但是對(duì)于Go,思來想去,感覺真的從“HelloWorld”說起,壓根撐不住一篇的篇幅,因?yàn)镚o的HelloWorld太簡(jiǎn)單了。

       1、簡(jiǎn)介

      •  Go是什么?

      Go(又稱Golang)是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。

      • Github地址

      https://github.com/golang/go

      • 官網(wǎng)地址

      https://

      •  中文網(wǎng)社區(qū)

      https://

      如果需要下載安裝包,可以進(jìn)入https:///dl下載,速度較快

      https://www./

      • 關(guān)鍵字

      簡(jiǎn)單,學(xué)習(xí)曲線低,天然高并發(fā),背景雄厚大廠擁抱

      2、環(huán)境搭建

      下載安裝

        進(jìn)入官網(wǎng)或者https:///dl下載對(duì)應(yīng)系統(tǒng)的安裝包(我的是MacOS系統(tǒng))

        下載成功后點(diǎn)擊安裝(無腦下一步即可)

      環(huán)境變量配置

        打開命令行執(zhí)行sudo vi ~/.bash_profile配置GOROOT和GOPATH

        注意:GOPATH如果不配置,默認(rèn)在會(huì)在用戶目錄下新建go目錄,GOPATH相當(dāng)于工作空間,有點(diǎn)類似Java開發(fā)的workspace。

        配置完成執(zhí)行g(shù)o version出現(xiàn)類似

      go version go1.12.4 darwin/amd64

        則表示安裝成功

      開發(fā)工具

        至于開發(fā)工具看個(gè)人喜好,鑒于做Java開發(fā)使用的宇宙第一好用IDE intellij idea確實(shí)好用,所以個(gè)人還是繼續(xù)用JetBrain的產(chǎn)品Goland作為開發(fā)IDE。

        當(dāng)然,除此以外,還有Atom,VS code等等。

      下面開始進(jìn)入正題,說說Go語言中的數(shù)組、切片和映射即Map。在此之前還需要介紹幾個(gè)背景知識(shí),不然第一次看Go的語言可能有點(diǎn)懵~

      3、背景知識(shí)

      類型后置

        不同于Java、C 等很多語言,Go采用類型后置的方式聲明變量

        比如Java中聲明一個(gè)int的基本類型是這樣的

      int a = 3;

        而Go里面其中一種聲明方式是這樣的

      var a int
      a = 3

      多樣的賦值語句

        Go的聲明和初始化方式豐富多樣,有點(diǎn)太豐富了,聽說2.0版本要稍微收收規(guī)范下

        比如如下的方式是正確的

      • 方式1

      var a int
      a = 3

        解讀:初始化語句表明了a是一個(gè)int類型,然后才能對(duì)一個(gè)int類型進(jìn)行賦值

      • 方式2

      var a = 3

        解讀:雖然沒有明確表示這是一個(gè)int,但是Go可以根據(jù)后面的賦值推斷出a的類型

      • 方式3

      a := 3

        解讀:這是一種簡(jiǎn)單高效的初始化和賦值方式,:=表示初始化一個(gè)變量a并同時(shí)對(duì)其賦值為3

      以下方式是不正確的

      • 方式1

      var a

        解讀:基于這樣的信息,a沒有賦值,Go編譯器是無法知道a的類型,也無法對(duì)其進(jìn)行初始化和賦值了

      • 方式2

      var a int
      a := 3

         解讀:雖然正確的聲明了一個(gè)int類型的a變量,但是下面的:=相當(dāng)有重新聲明了一個(gè)變量a,所以重復(fù)申明也會(huì)編譯出錯(cuò)

      有了上面兩個(gè)背景知識(shí)儲(chǔ)備,加上自個(gè)兒在相關(guān)語言上面深厚的積累,開始下面的講解就沒事問題了~

      4、數(shù)組

        數(shù)組幾乎是每個(gè)語言必備的數(shù)據(jù)結(jié)構(gòu)之一,Go也不例外。

        數(shù)組也有多種初始化和賦值方式

      • 方式1

      var arr [5]int // 注意這里必須要聲明大小,下面要講的切片這里可以不用聲明大小
      arr[0] = 0
      arr[1] = 1
      arr[4] = 4
      • 方式2

      var arr []int
      arr = make([]int, 4) 

        該方式通過make指定數(shù)組的大小,這里表示數(shù)組容量為4,超過4,比如賦值如arr[4]=4,則會(huì)報(bào)錯(cuò)panic: runtime error: index out of range

        panic相當(dāng)于Java里面的Exception

      • 方式3

      var arr [5]int{1,2,3,4,5}
      • 方式4

      arr := [5]int{1,2,3,4,5}
      • 方式5

      var arr [...]int{0:1, 3:4, 1:2} // x:y,其中x表示index,y表示值,...表示變長(zhǎng)和Java中的變長(zhǎng)函數(shù)一個(gè)道理

      5、切片

        切片有些語言里面可能沒有這個(gè)名詞,我記得Python里面有,Java里就沒有。

        切片可以看成是一種特殊的數(shù)組,該種數(shù)組可以變長(zhǎng)。其生命和初始化方式也有多種

      • 方式1

      var s []int{1,2,3,4,5}
      s := []int{1,2,3,4,5}
      • 方式2

      s := make([]int, 3, 5) // 3所在位置表示切片長(zhǎng)度,5所在位置表示容量即最大可能存儲(chǔ)的元素個(gè)數(shù)

        注意:s[2]=2該賦值是合法的,但是s[3]=3則會(huì)報(bào)錯(cuò),因?yàn)樾枰褂胊ppend追加元素,類似

      s = append(s, 3) // 此時(shí)len=4, cap=5
      s[3] = 10	// 對(duì)s[3]重新賦值,合法

        另外如果賦值時(shí),切片長(zhǎng)度沒超過定義的切片的長(zhǎng)度,返回原來的切片地址,如果超過了長(zhǎng)度,切片會(huì)擴(kuò)容進(jìn)行重新分配地址。

      • 方式3

      s := arr[1:3]	// 表示截取數(shù)組一部分成為一個(gè)切片,1表示起始位置,3表示結(jié)束為止,是一個(gè)左閉右開區(qū)間

      6、Map

        map就是鍵值對(duì),跟Java的沒差

        聲明好初始化的方式如下

      • 方式1

      var m map[string]int	// string所在位置表示key的類型,int所在位置表示value的類型
      • 方式2

      m := make(map[string]int, 5)	// 5所在位置表示map的容量
      • 方式3

      m = map[string]int{"jackie":1, "zheng":8}

      7、共同點(diǎn)和差異點(diǎn)

      • 數(shù)組、切片和Map都可以通過make關(guān)鍵字進(jìn)行初始化

      • 數(shù)組、切片和Map都支持在`{}`里面使用`index:value`進(jìn)行初始化值

      • 數(shù)組和切片差別在于數(shù)組必須聲明數(shù)組容量,即使是變長(zhǎng)聲明類型,也必須列出具體數(shù)組元素

      • 切片有append函數(shù),涉及到擴(kuò)容等問題

      8、下篇預(yù)告

        1、數(shù)組、切片和map的遍歷以,切片擴(kuò)容,map根據(jù)key和value排序等

        2、Go和Java使用體驗(yàn)差異

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多