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 快速生成递增序列;无类型常量让赋值更灵活。能用常量的地方不要用变量。

笔记加载中…