<p align="right">2021年08月31日 13:54:49</p>
[TOC]
# 變量
變量(variable)的功能是存儲數據,常見的數據類型有:整數、浮點型、布爾型等。
## 變量聲明
Go語言中的變量需要聲明后才能使用,同一作用于內不支持重復聲明。并且Go語言的變量聲明后必須使用。
## 標準聲明
Go語言的變量聲明格式為
```golang
var 變量名 變量類型
```
例如
```golang
var name string
var age int
var isOk bool
```
## 批量聲明
```golang
var (
a string
b int
c bool
d float32
)
```
## 變量的初始化
Go語言在聲明變量的時候會自動對變量對應的內存區域進行初始化。默認值如下
| 類型 | 默認值 |
| --- | --- |
| 整型/浮點型 | 0 |
|字符串|空字符串|
|布爾型|false|
|切片/函數/指針|nil|
也可以在聲明變量的時候手動指定其初始值,初始化標準格式如下
```golang
var 變量名 類型 = 表達式
```
實例
```
var name string = "ns-cn.cn"
var sex int = 1
```
也可以一次初始化多個變量
```
var name, sex = "ns-cn.cn", 1
```
### 類型推導
編譯器會根據等號右邊的值來推導變量的類型完成初始化
```
var name = "ns-cn.cn"
var sex = 1
```
### 短變量聲明
在函數內部,可以使用更簡略的`:=`方式聲明并初始化變量
```
package main
import ("fmt")
var global = 100
func main(){
var varWay1 = 100
varWay2 := 200
fmt.Println(varWay1, varWay2)
}
```
### 匿名變量
使用多重賦值ID時,可以使用匿名變量忽略某個值,匿名變量用一個下劃線標示`_`
```
func foo() (int, string){
return 10, "ns-cn"
}
func main(){
x, _ := foo()
_,y := foo()
fmt.Println(x,y)
}
```
> 匿名變量不占用命名空間,不會分配內存,所以你們變量之間不存在重復聲明~~~
> 函數外的每個語句都必須以關鍵字開始(var、const、func等)
> `:=`不能使用在函數外。
> `_`多用于占位,表示忽略值。
# 常量
## 常量的地你定義
常量是恒定不變的值,多用于定義程序運行期間不會改變的值。常量的標準聲明格式如下
```
const 常量名稱 = 值
```
例如
```
const pi = 3.1415
const e = 2.7182
```
也可以多個常量一起聲明
```
const (
pi = 3.1415
e = 2.1782
)
```
const 同時聲明多個常量時,如果省略了值則表示和上面一行的值相同,例如
```
const (
n1 = 100
n2
n3
)
```
上面的示例中,常量`n1`、`n2`、`n3`的值都是`100`。
## iota
`iota`是go語言的常量計數器,只能在常量的表達式中使用。`iota`在`const`關鍵字出現時將被重置為`0`。`const`中每新增一行常量聲明將使`iota`計數一次(`iota`可理解為`const`語句塊中的行索引)。 使用`iota`能簡化定義,在定義枚舉時很有用。
```
const(
n1 = iota //0
n2 //1
n3 //2
n4 //3
)
```
## iota高級用法
使用`_`跳過某些值
```
const(
n1 = iota //0
n2 //1
_
n4 //3
)
```
iota聲明中插隊
```
const (
n1 = iota //0
n2 = 100 //100
n3 = iota //2
n4 //3
)
const n5 = iota //0
```
使用iota運算結果
```
const(
a = iota*2 //0
b //2
c //4
)
```
多個iota定義一行
```
const(
a, b = iota + 1, iota + 2 //1,2
c, d //2,3
e, f //3,4
)
```