跳到主要内容

变量与常量

变量

Go语言中变量的声明语法:

// 显式声明
var myVar string="hello"
// 隐式声明
var myVar = "hello"
// 短声明
myVar := "hello"

显示声明比较直观,短声明更方便。变量在函数体外只能声明,不能赋值。

常量

在Go程序运行期间,常量不会被修改。变量的数据类型只可以是布尔类型、数值类型和字符串类型。常量的声明语法:

// const 常量名 [数据类型] = 常量值
// 显式声明
const author string = "heruos"
// 隐式声明
const author = "heruos"
// 一行内声明多个同类型常量
const a,b = 1,2
// 常量模拟枚举
const (
A = "0"
B = "1"
)

常量中的iota

go语言没有专门的枚举类,我们一般将常量当作枚举类。比如:

const (
atlas = 0
banshee = 1
chroma = 2
equinox = 3
)
fmt.Println(atlas, banshee, chroma, equinox)

在后续更新的时候,可能会增加或删除一些枚举类常量,这时候对常量组进行操作就比较麻烦,需要手写编号。

其实,当我们使用常量作为枚举类的时候,我们只需要常量名不同,常量的值并没有什么意义。因此,就可以使用iota(常量计数器)简化操作。

示例

const (
atlas = iota
banshee
chroma
equinox
)
fmt.Println(atlas, banshee, chroma, equinox) // 0,1,2,3

常量组的第一个常量被赋值为iota后,同组内没有表达式的常量从第二个开始,会沿用上一个常量的表达式。第二个常量实际为banshee = iota

iota初始为0,一旦使用就会+1。所以第一个常量为0,第二个常量自动为1,依此类推,就不需要手动维护当作枚举类的常量组。

  • 如果需要iota从1开始,可以将空白标识符作为第一个枚举常量
const (
_ = iota
atlas
banshee
)

补充

  • iota只能在常量组中使用。
  • 多个常量组不能共用一个iota,一个常量组一个iota,A常量组的iota计数不会影响B常量组,B常量组的iota依旧从0开始。