三、關鍵字及内置預聲明常量、類型、函數
1、關鍵字
Go有25個關鍵字,隻能用在文法允許的地方,不能作為名稱使用,它們是:
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
2、内置的預聲明的常量、類型和函數
常量:true false iota nil
類型:int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
函數: make len cap new append copy close delete
complex real imag
panic recover
四、變量及常量的聲明
1、變量
辨別符 (包括變量、常量、函數、包名)必須以字元開頭(所有Unicode UTF-8中的字元 或 下劃線“_”),不能使用數字開頭。
變量的三個作用域:在函數的形式參數和函數内聲明的變量(常量、函數也是)是局部變量,在函數外聲明的是全局變量,首字母大寫的變量在包外可見,是以形成的3個作用域塊由大到小是: 包>檔案>函數 ,對應 包内全局變量、檔案内私有全局變量、局變量。
同一作用域内不予許重複聲明同名變量,局部變量可以與全局變量同名,但包名跟作用域無關,包名隻是為了辨別檔案所屬的包。
聲明全局變量必須使用 var 關鍵字。
聲明單個局部變量也可以使用 var 關鍵字,但不能使用 var 同時聲明多個局部變量,一般使用 := 快速聲明指派局變量, := 隻能用于局部變量。
go 是強類型語言,聲明變量時需要指明變量類型, 文法:
var 變量名 類型
下面是變量的聲明和指派方法:
var i int //聲明一個 int 變量, 全局變量的聲明不可以省略 var 關鍵字。
i = 1 //指派
var m int = 2 //聲明變量并指派
var n = 3 //省略 變量類型聲明,編譯器自動推導出變量類型
k:=4 //使用 := 聲明并指派一個變量,編譯器自動推導出變量類型, := 不能用于單純指派,不能用于聲明全局變量
var x,y int //聲明多個int 比量
var x1,x2,x3,x4 int = 1,2,3,4 //聲明多個變量并指派
//這樣也是聲明多個變量
var (
a1 int
a2 int
)
var (
b1 int = 1
b2 int =2
b3 := 3
)
var v2, v3, v4 int
v2, v3, v4 = 1, 2, 3 //多重指派
i := 10
j := 20
i, j = j, i //交換變量的值
關于 := 對局部變量的重新聲明和重新指派:該操作符隐含了局部變量的聲明,但是,都用于批量聲明和指派時,如果對同一個局部變量做了操作,要看情況
func f(){
i:=1
i:=2 //err,不能重新聲明變量 i
a1,a2 :=1,2
a1,a2 := 3,4 //err,不能重新聲明變量 a1,a2
a1, b1,i := 3,4,5 //ok ,聲明了一個新變量 b1, 同時對變量 a1 和 i 重新指派
}
匿名變量:下劃線在 go 語言中被稱為匿名變量,是一個特殊的變量名,任何賦予它的值都會被丢棄,go的函數介意傳回多個值,如果不需要其中某個值就可以把它賦給下劃線。
2、常量
常量:go 語言中常量是指編譯期間就已知且不可改變的值,包括指程式中寫死的字面常量,和使用 const 聲明的常量。
寫死的字面常量包括數值類型(包括整型、浮點型和複數類型)、布爾類型、字元串類型;
常量的聲明文法和變量生命與法一樣,隻要把 var 換成 const 即可。
如果試圖對一個常量進行重新指派将導緻編譯錯誤。
常量疊代生成器 iota :如果過需要按一定規則聲明一批常量,可以使用 iota 生成器,iota 生成器在遇到 const 關鍵字時被初始化為0,聲明常量的代碼每換一行增加1,如果過同一行聲明多個常量,則這些常量的值相同。
const (
x = iota // x == 0
y //y =1 ,隻要第一個常量使用了 iota,後面的會隐式使用
z //z=2
)
const m = iota //0
const (
a1 = iota //0
a2 = 2
a3,a4 = iota,iota //同一行,都是1
a5 = iota //2
)
const (
_ = iota
KB float64 = 1 << (10*iota) //KB為1左移10位
MB //MB左移20位 ...
GB
TB
)