<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
)
```