按照以往開一些專題的風格,第一篇通常都是「從HelloWorld開始」git
可是對於Go,思來想去,感受真的從「HelloWorld」提及,壓根撐不住一篇的篇幅,由於Go的HelloWorld太簡單了。github
Go是什麼?golang
Go(又稱Golang)是Google開發的一種靜態強類型、編譯型、併發型,並具備垃圾回收功能的編程語言。——摘自百度百科編程
Github地址數組
官網地址數據結構
中文網社區app
studygolang.com編程語言
若是須要下載安裝包,能夠進入studygolang.com/dl下載,速度較快
關鍵字
簡單,學習曲線低,自然高併發,背景雄厚,大廠擁抱
進入官網或者studygolang.com/dl下載對應系統的安裝包(個人是MacOS系統)
下載成功後點擊安裝(無腦下一步便可)
打開命令行執行sudo vi ~/.bash_profile配置GOROOT和GOPATH
注意:GOPATH若是不配置,默認在會在用戶目錄下新建go目錄,GOPATH至關於工做空間,有點相似Java開發的workspace。
配置完成執行go version出現相似
go version go1.12.4 darwin/amd64
複製代碼
則表示安裝成功
至於開發工具看我的喜愛,鑑於作Java開發使用的宇宙第一好用IDE intellij idea確實好用,因此我的仍是繼續用JetBrain的產品Goland做爲開發IDE。
固然,除此之外,還有Atom,VS code等等。
下面開始進入正題,說說Go語言中的數組、切片和映射即Map。在此以前還須要介紹幾個背景知識,否則第一次看Go的語言可能有點懵~
不一樣於Java、C++等不少語言,Go採用類型後置的方式聲明變量
好比Java中聲明一個int的基本類型是這樣的
int a = 3;
複製代碼
而Go裏面其中一種聲明方式是這樣的
var a int
a = 3
複製代碼
Go的聲明和初始化方式豐富多樣,有點太豐富了,據說2.0版本要稍微收收規範下
好比以下的方式是正確的
var a int
a = 3
複製代碼
**解讀:**初始化語句代表了a是一個int類型
而後才能對一個int類型進行賦值
var a = 3
複製代碼
**解讀:**雖然沒有明確表示這是一個int,可是Go能夠根據後面的賦值推斷出a的類型
a := 3
複製代碼
**解讀:**這是一種簡單高效的初始化和賦值方式,:=
表示初始化一個變量a並同時對其賦值爲3
如下方式是不正確的
var a
複製代碼
**解讀:**基於這樣的信息,a沒有賦值,Go編譯器是沒法知道a的類型,也沒法對其進行初始化和賦值了
var a int
a := 3
複製代碼
**解讀:**雖然正確的聲明瞭一個int類型的a變量,可是下面的:=
至關有從新聲明瞭一個變量a,因此重複申明也會編譯出錯
有了上面兩個背景知識儲備,加上自個兒在相關語言上面深厚的積累,開始下面的講解就沒事問題了~
數組幾乎是每一個語言必備的數據結構之一,Go也不例外。
數組也有多種初始化和賦值方式
var arr [5]int // 注意這裏必需要聲明大小,下面要講的切片這裏能夠不用聲明大小
arr[0] = 0
arr[1] = 1
arr[4] = 4
複製代碼
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表示值,...表示變長和Java中的變長函數一個道理
複製代碼
切片有些語言裏面可能沒有這個名詞,我記得Python裏面有,Java裏就沒有。
切片能夠當作是一種特殊的數組,該種數組能夠變長。其生命和初始化方式也有多種
var s []int{1,2,3,4,5}
s := []int{1,2,3,4,5}
複製代碼
s := make([]int, 3, 5) // 3所在位置表示切片長度,5所在位置表示容量即最大可能存儲的元素個數
複製代碼
注意:s[2]=2
該賦值是合法的,可是s[3]=3
則會報錯,由於須要使用append追加元素,相似
s = append(s, 3) // 此時len=4, cap=5
s[3] = 10 // 對s[3]從新賦值,合法
複製代碼
另外若是賦值時,切片長度沒超過定義的切片的長度,返回原來的切片地址,若是超過了長度,切片會擴容進行從新分配地址。
s := arr[1:3] // 表示截取數組一部分紅爲一個切片,1表示起始位置,3表示結束爲止,是一個左閉右開區間
複製代碼
map就是鍵值對,跟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}
複製代碼
切片和Map均可以經過make關鍵字進行初始化
數組、切片和Map都支持在{}
裏面使用index:value
進行初始化值
數組和切片差異在於數組必須聲明數組容量,即便是變長聲明類型,也必須列出具體數組元素
切片有append函數,涉及到擴容等問題
一、數組、切片和map的遍歷以,切片擴容,map根據key和value排序等
二、Go和Java使用體驗差別
我的公衆號:JackieZheng 我會將我最新的文章推送給您,並和您一塊兒分享我平常閱讀過的優質文章