变量
显式的完整声明
var varName dateType [ = value]
- 关键字
var
用于声明变量 varName
为变量标识符dataType
为基本类型value
为变量的初始值,初始值可以是字面量,也可以是其他变量名,还可以是一个表达式,如果不指定初始值,则默认初始化为类型的零值- 一次声明可以定义多个同类型变量,赋值时,值必须与变量数量对应
- 变量声明后会立即为其分配空间 ```go var a int // 声明一个没有初始值的变量,默认为类型的零值 var b int = 1 // 声明一个变量便设定一个默认值 var c int = 2 * 3 // 声明一个变量,值为一个表达式 var d int = b // 声明一个变量,值为其他变量名 var e, f int // 声明多个变量,值为类型的零值 var g, h int = 10, 20 // 声明多个变量并赋值
// ❌ 错误声明 var a int = “1” // 不能将其他类型赋值给声明类型 cannot use “1” (type string) as type int in assignment var b, c int = 10 // 赋值的数量应与定义的变量数一致 assignment mismatch: 2 variable but 1 values
<a name="5FBrY"></a>
#### 短类型声明
`varName := value`
- 短类型声明不需要`var`关键字和数据类型,Go编译器会自动进行数据类型的推断
- **`:=`声明只能出现在函数或方法内**
- 可以对多个类型变量声明并赋值,例如:`a, b = 1, "hello"`
<a name="GpU4N"></a>
## 常量
常量使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型由定义常量时指定的类型决定,而且该内存地址里存放的内容不可以改变,Go中常量分为布尔型、字符串型和数值型常量。常量存储在程序的只读字段里(.rodata section)。<br />**预声明标识符 `iota` **用在常量声明中,其初始值为0, 一组多个常量同时声明时,其值逐行增加,`iota` 可以看做自增的枚举变量,专门用来初始化常量。
```go
// 类似枚举的iota
const (
c0 = iota // c0 == 0
c1 = iota // c1 == 1
c2 = iota // c2 == 2
)
// 简写模式
// 简写模式下,未赋值的常量与上一个赋值常量的表达式或值一致
const (
c0 = iota // c0 == 0
c1 // c1 = iota == 1
c2 // c2 = iota == 2
)
const (
c0 = 1 // c0 == 1
c1 // c1 == 1
)
// iota逐行增加,与有没有使用iota没有关系
const (
a = iota // a == 0
b = 1
c = iota // c == 2
)
// 分开的const语句,iota每次都从0开始
const x = iota // x == 0
const y = iota // y == 0