## 變量
#### 變量來歷
程序運行過程中的數據都是保存在內存中的,我們想要在代碼操作某個數據的時候就需要去內存中找到這個數據對應的地址,但是如果我們直接在代碼中通過內存地址去操作數據的話,代碼的可讀性會非常差而且容易出錯,所以我們就利用變量將這個數據的內存地址保存起來,以后通過這個變量就能找到內存中對應的數據。
#### 變量類型
變量(Variable)的功能是存儲數據。不同的變量保存的數據類型可能會不一樣。經過半個多世紀的發展,編程語言已經基本形成了一套固定的類型,常見變量的數據類型有:整型、浮點型、布爾型等。
Go語言中的每一個變量都有自己的類型,并且變量必須經過聲明才能開始使用。
#### 變量聲明
Go語言中變量名稱的定義和大部分程序語言是一致的,由字母數字和_(下劃線)組成,并且只能以字母和_開頭。
Go語言中的變量需要聲明后才能使用,同一作用域內不支持重復聲明。
并且Go語言的變量聲明后必須使用。
Go語言的變量聲明格式為:
```
var 變量名 變量類型
```
變量聲明以關鍵字var開頭,變量類型放在變量的后面。
舉個例子:
```
var name string
var age int
var isOk bool
```
每聲明一個變量就需要寫var關鍵字會比較繁瑣,go語言中還支持批量變量聲明:
```
var (
a string
b int
c bool
d float32
)
```
變量聲明并且初始化
```
var x string = "lanyulei"
```
go語言也可以不指定數據類型,但是編譯器會根據你的數據,進行推導然后給數據指定類型
```
var x = "lanyulei"
```
通過`:=`進行短變量聲明,這種短變量的聲明方式,只能在函數內部使用
```
x := "lanyulei"
```
匿名變量聲明,匿名變量是在當你有不需要接受的值的時候才使用的變量賦值方式,使用`_`下劃線來接收
```
func foo() (string, int) {
return "lanyulei", 18
}
func main() {
name, _ := foo() // 這邊表示丟棄函數的第二個返回值
}
```
## 常量
相對于變量,常量是恒定不變的值,多用于定義程序運行期間不會改變的那些值。
常量的聲明和變量聲明非常類似,只是把`var`換成了`const`,常量在定義的時候必須賦值。
#### 常量聲明
```
const pi = 3.1415926
```
聲明了pi這個常量之后,在整個程序運行期間它的值都不能再發生變化了。
多個常量也可以一起聲明,和多個變量的聲明方式基本相同,例如:
```
const (
PI = 3.1415926
E = 2.7182
)
```
const同時聲明多個常量時,如果省略了值則表示和上面一行的值相同。 例如:
```
const (
N1 = 100
N2 // 100
N3 // 100
)
```
大家約定成俗的常量命名規范就是字母部分全部大寫,所以建議你以后的開發也保持這樣的習慣。
#### iota
`iota`是go語言的常量計數器,只能在常量的表達式中使用。
`iota`在const關鍵字出現時將被重置為0。
const中每新增一行常量聲明將使`iota`計數一次(iota可理解為const語句塊中的行索引)。
使用`iota`能簡化定義,在定義枚舉時很有用。
```
const (
A = iota
B
C
D
)
```
使用`_`跳過不需要的值
```
const (
A = iota
B
_
D
)
```
* iota如何不屑const聲明的話,默認和上次一樣
* 遇到const iota就初始化為0
* const中沒新增一行變量聲明iota就增加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
```
Go語言中的37個保留字:
```
Constants: true false iota nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover
```