按照以往開一些專題的風(fēng)格,第一篇一般都是“從HelloWorld開始” 但是對(duì)于Go,思來想去,感覺真的從“HelloWorld”說起,壓根撐不住一篇的篇幅,因?yàn)镚o的HelloWorld太簡(jiǎn)單了。 1、簡(jiǎn)介
Go(又稱Golang)是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。
如果需要下載安裝包,可以進(jìn)入https:///dl下載,速度較快
簡(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ī)范下 比如如下的方式是正確的
var a int a = 3 解讀:初始化語句表明了a是一個(gè)int類型,然后才能對(duì)一個(gè)int類型進(jìn)行賦值
var a = 3 解讀:雖然沒有明確表示這是一個(gè)int,但是Go可以根據(jù)后面的賦值推斷出a的類型
a := 3 解讀:這是一種簡(jiǎn)單高效的初始化和賦值方式,:=表示初始化一個(gè)變量a并同時(shí)對(duì)其賦值為3 以下方式是不正確的
var a 解讀:基于這樣的信息,a沒有賦值,Go編譯器是無法知道a的類型,也無法對(duì)其進(jìn)行初始化和賦值了
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ù)組也有多種初始化和賦值方式
var arr [5]int // 注意這里必須要聲明大小,下面要講的切片這里可以不用聲明大小 arr[0] = 0 arr[1] = 1 arr[4] = 4
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
var arr [5]int{1,2,3,4,5}
arr := [5]int{1,2,3,4,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)。其生命和初始化方式也有多種
var s []int{1,2,3,4,5} s := []int{1,2,3,4,5}
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)行重新分配地址。
s := arr[1:3] // 表示截取數(shù)組一部分成為一個(gè)切片,1表示起始位置,3表示結(jié)束為止,是一個(gè)左閉右開區(qū)間 6、Map map就是鍵值對(duì),跟Java的沒差 聲明好初始化的方式如下
var m map[string]int // string所在位置表示key的類型,int所在位置表示value的類型
m := make(map[string]int, 5) // 5所在位置表示map的容量
m = map[string]int{"jackie":1, "zheng":8} 7、共同點(diǎn)和差異點(diǎn)
8、下篇預(yù)告 1、數(shù)組、切片和map的遍歷以,切片擴(kuò)容,map根據(jù)key和value排序等 2、Go和Java使用體驗(yàn)差異 |
|