這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Go語言學習
基本類型
Bool 取值範圍:true,false (不可以用數字代替)
Int/uint 根據平台可能為32或64位
int8/uint8 長度:1位元組 取值範圍-128~127/0~255
byte(uint8別名)
int16/uint16 int32/uint32 int62/uint64
float32/float64 長度:4/8位元組 小數位:精確到7/15小數位
複數:complex64/complex128 長度:8/16位元組 足夠儲存指標的32位或64位整數型
零值是變數的預設值
在submit裡面ctrl+b是開啟我們的測試視窗,go run 是運行程式
Go語言中只能顯示轉換<valueA> [:]=<TypeOfValueA>(<ValueB>)
浮點型和布爾型不能進行轉換
string轉換為int類型 var valueA, _ = strconv.Atoi(ValueB)
Int類型轉換為string類型 valueA:= strconv.Itoa(ValueB)
Go中有指標
採用”.”選擇符來操作指標目標對象的成員
操作符”&”取變數地址,使用”*”通過指標間接訪問目標對象
預設值為nil不是null
If語句中大括弧必須跟在條件陳述式後面,條件陳述式可以沒有括弧,可以在條件陳述式中可以聲明變數
For語句 for{} 無限迴圈 for i:=0;i<3;i++ {} 傳統模式
Switch 支援任何類型或運算式的條件陳述式,不需要break,符合條件自動跳出,如需要繼續執行下一個case,需要使用fallthrough語句,支援初始設定式,右側需跟分號,做大括弧必須和條件陳述式在同一行。
Goto break和continue會與標籤結合使用,否則break只會跳出本次迴圈
數組 var a [2]int //長度為2的int型數組
沒有賦值,則預設的值為零;string預設為空白
a :=[2]int{1} //數組的第一個數為1,第二個為預設0
a :=[20]int{19:1} //添加索引,第二十個元素為0,其他為0
a :=[…]int{1,2,3,4,5} //長度為5的數組
a :=[…]int{19:1} //索引20元素為1,其他為零,數組長度為20
數組指標 a := […]int{19:1}
Var p *[100]int= &a //p位元組a的地址
指標數組 x,y=1,2
a:=[…]int{&x,&y} //a輸出的是x,y的地址
數組之間可以進行==和!=的比較
切片Slice
本身不是數組,它指向底層的數組
可以直接建立或從底層數組擷取產生
len()擷取元素個數,cap()擷取容量,make()建立,如果多個slice指向相同底層數組,其中一個的值改變會影響全部
make([]T,len,cap) 如果cap省略,則和len的值相同
var a=[]int //切片的定義
a:=[10]int
s1:=a[5:] //切片s1取數組a索引5到最後的元素
s1:=a[:5]//s1取數組a索引0到5的元素
s1:=a[3:9] //s1取數組a索引3到9的元素
s1 :=make([]int,3,6) //定義s1切片,長度為3,容量為6
s1=append(s1,1,2,3) //利用append函數為切片s1追加元素1.2.3
map
var m map[int]string //map定義
m=make(map[intstring]) //初始化
m[1]=”ok” //賦值
a :=m[1] //取值
delete(m,1) //刪除值
多重map嵌套,需要第二層的進行初始化
var m map[int]map[int]string
m=make(map[int]map[int]string)
m[1]=make(map[int]string) //對於key為1 進行初始化
m[1][1]=”ok”
a:=m[]
range 迭代函數
sort.Ints(s) 排序
對map的間接排序
m :=map[int]string{1:”a”,2:”b”,3:”c”,4:”d”,5:”e”} //建map
s:=make([]int,len(m))//建slice
i:=0
for k,_:=range m{ //迭代取出每一個key的值,存到slice中
s[i]=k
i++
}
Sort.Ints(s) //對slice排序
Go 函數 不支援 嵌套、重載和預設參數
無需聲明原型、不定長度變參、多傳回值、命名傳回值參數
匿名函數、閉包
defer
在函數體執行結束後
按照調用順序的相反順序逐個執行
即使函數發生嚴重錯誤也會執行
支援匿名函數的調用
常用於資源清理、檔案關閉、解鎖以及記錄時間等操作
通過與匿名函數配合可在return之後修改Function Compute結果
如果函數體內某個變數作為defer時匿名函數的參數,則在定義defer
時即已經獲得了拷貝,否則則是引用某個變數的地址
Go 沒有異常機制,但有 panic/recover 模式來處理錯誤
Panic 可以在任何地方引發,但recover只有在defer調用的函數中有效
結構體
Go 中的struct與C中的struct非常相似,並且Go沒有class
使用 type <Name> struct{} 定義結構,名稱遵循可見度規則
支援指向自身的指標類型成員
支援匿名結構,可用作成員或定義成員變數
匿名結構也可以用於map的值
可以使用字面值對結構進行初始化
允許直接通過指標來讀寫結構成員
相同類型的成員可進行直接拷貝賦值
支援 == 與 !=比較子,但不支援 > 或 <
支援匿名欄位,本質上是定義了以某個類型名為名稱的欄位
嵌入結構作為匿名欄位看起來像繼承,但不是繼承
可以使用匿名欄位指標