- 在函數外面定義變量時 要用
var
不能用:=
- byte
8位
rune32位
(字符類型)
complex64
(複數,實部32位,虛部32位)
- go中沒有隱式類型轉換 類型轉換都是強制的
float
類型四捨五入爲int
: int((a*10+5)/10)
-
const a = 3
var b float64 = 2
c := a+b
var a = 3
var b float64 = 2
c := a+b
- go的switch是自動break的,可以用
fallthrough
取消break
- 換行需打逗號
fmt.Println(a,b)
fmt.Println(a,
b)
fmt.Println(a,
b,
)
fmt.Println(a,
b
)
- go中的指針不能進行運算(與c++不同)
- go中參數的傳遞只有值傳遞一種方式
- 交換兩個變量:
a,b = b,a
- iota 在const 中使用,從0開始遞增
const(
B = 1 <<(10*iota)
KB
MB
)
-
var arr [5]int
arr := [5]int{1,2,3,4,5}
arr := [...]{1,2,3,4,5}
- 數組是值類型
- 切片是數組的一個視圖(引用類型)
- 切片可以向後擴展,不可以向前擴展
注:切片時可以向後擴展,不能超過cap,取值時不能擴展,不能超過len
append
時,若超越cap,系統會重新分配更大的底層數組
map
的key是無序的
- 若從
map
取值時,key不存在,會返回默認值,不會報錯
- 爲結構定義的方法,必須放在同一個包內(可以是不同的文件)
- 指針接收者實現只能以指針方式使用,值接收者都可
- defer執行順序類似棧,先進後出
- 參數在defer語句時計算
func T(){
i := 0
defer fmt.Println(i)
i = 1000
return
}
- defer 和return
func F1(){
x := 5
defer fun(){
x += 1
}()
return x
}
func F2()(x int){
defer func(){
x += 1
}()
return 5
}
panic
過程:停止當前函數執行,一直向上返回,執行每層的defer(defer在panic之前定義)如果沒有遇見recover
,程序退出
recover
:僅在defer調用中使用,獲取panic的值,如果無法處理,可以重新panic