思維導圖
變量
聲明形式為var 變量名 變量類型
賦值形式為變量名=變量值
聲明和賦值同時形式為變量名:=變量值
多個變量同時聲明使用形式為
var (x intb bool
)
當有多個變量類型一樣時,可以放在一行,形式為var x,y int
,當類型一樣,并且需要賦值同一行形式為a, b :=10, 20
特殊變量名_(下劃線),當賦值給下劃線時,會被丟棄_, b:=10,20
類型
int在32位硬件上是32位的,在64位硬件上是64位的
數字類型的有
- int8, int16,int32,int64, rune(int32的別名)
- byte, uint8, uint16, uint32, uint64
- float32, float64
字符串在go中是不可修改的,如果需要修改,需要如下操作
var s string = "hello"
c := []rune(s)
c[0] = 'c'
s2 := string(c)
多行字符串支持形式有
- 使用+換行,這個不包含換行符
- 使用反引用``,包含換行符
s := "Starting part" +"Ending part"
s1 := `Starting partEnding part`
復數類型有complex126, complex64
錯誤類型為error
常量
其支持的類型有數字、布爾和字符串。多個常量同時聲明使用形式與變量類似。在使用枚舉時,可以使用iota,首次使用表示0,再次使用則+1,如
const (a = iotab
)
運算符
算術運算符有:*,/, %,<<, >>
位運算符有:&,&^, |, ^
關系運算符有:==, !=, <,<=, >, >=
邏輯運算符有:&&, ||, !
通道運算符:<-
控制結構
支持條件和循環
條件形式為if或者switch
if 條件 {} else {}
或者
switch {
case 條件
}
在switch不帶表達式時,即為true,執行內部的case條件語句
在帶有表達式時,會判斷條件的真假,進入對應的case分支,匹配失敗時不會向c語言樣自動向下嘗試,如果想要像c語言那樣,則添加fallthrough
循環形式有
for init; condition; post {}
或者
for condition {}
或者
for {}
range可以用于循環,尤其是在數據類型為slice, array, string, map和channel
list := []string{"a", "b", "c", "d", "e", "f"}
for k, v := range list {fmt.Println(k, v)
}
array,slice和map
數組聲明形式為var a [n]type
,其中n表示數組元素個數,type表示數組元素類型。在聯合聲明時a:=[...]int{}
,n可以使用省略號,由go自動計算數組元素個數。數組是值類型
slice是引用類型,為指向array的指針
函數
形式為
func (p myType) funcname(q int)(r, s int) {
}
當沒有返回值時,(r,s int)可以省略
當返回值只有一個時,可以只寫類型
defer語句在函數退出時執行,比如資源回收
變參函數形式為
func funcname(arg ...int)
在函數體內,變參類型為slice,對于沒有指定類型的變參,類型默認為interface
包
包中大寫字母開頭的是public的,小寫字母開頭的是private的
推薦使用go module來管理包
測試包
測試包為testing。在使用go test時,會遍歷以_test.go結尾的go文件,同時執行以Test開頭的測試函數