Go 常量
常量声明后不可再修改,用 const 定义,适合放圆周率、状态码等固定数据。片段省略外壳,可放入 main 函数运行。
1. 基本声明
const 可带类型也可省略类型,多个常量可以一起声明:
const pi = 3.14159 // 推断类型
const a int = 100 // 显式类型
const name, age = "小明", 25
const (
statusOK = 200
statusErr = 500
)
fmt.Println(pi, a, statusOK) // 输出: 3.14159 100 200
注意:常量不能用 :=,其值必须在编译期可知,例如 const days = 7 * 24 合法。
2. 修改会报错
常量赋值会编译失败:
const pi = 3.14
// pi = 3.14159 // 错误: cannot assign to pi
3. iota 枚举
iota 是内置常量计数器,只能在 const 块中使用,从 0 开始每行自动加 1:
const (
Monday = iota // 0
Tuesday // 1
Wednesday // 2
)
fmt.Println(Monday, Tuesday, Wednesday) // 输出: 0 1 2
4. iota 常见用法
用 _ 跳过某一行,或配合左移计算字节单位:
const (
_ = iota // 跳过 0
KB = 1 << (10 * iota) // 1024
MB // 1048576
GB // 1073741824
)
fmt.Println(KB, MB, GB) // 输出: 1024 1048576 1073741824
5. 无类型常量
省略类型的常量只在用时确定类型,赋值很灵活:
const n = 100 // 无类型常量
var big int64 = n // 可赋给 int64
var small int8 = 100 // 值在范围内也能赋
fmt.Println(big, small) // 输出: 100 100
若写成 const n int = 100 再赋给 int64 会报类型不匹配,这正是无类型常量的价值。
小结
常量用 const 定义、值不可变;iota 快速生成递增序列;无类型常量让赋值更灵活。能用常量的地方不要用变量。