
使用 const 关键字定义。常量的值必须在编译时就能确定(比如数字、字符串、布尔值)。
const Pi = 3.14159
const Love = "秋香"
const IsHandsome = true

Love = "石榴姐"?

Go 语言虽然没有 enum (枚举) 关键字,但它有更强大的神器 —— iota。它可以帮我们自动生成连续的数字,非常适合定义家丁等级。
const (
LevelLow = iota // 0 (低级家丁)
LevelMid // 1 (中级家丁)
LevelHigh // 2 (高级家丁)
LevelTang // 3 (书童华安)
)
唐伯虎解说: iota 就像是一个计数器,在 const 括号里,每增加一行,它就自动加 1。哪怕你不写赋值,它也会默认继承上一行的逻辑。
const (
A = iota // 0
_ // 1 (跳过)
C // 2
D = "插队" // D是字符串"插队", iota内部还在计数(3)
E = iota // 4 (恢复计数)
)
Go 的常量还有一个神奇的特性:无类型 (Untyped)。
当你写 const a = 100 时,a 既可以当 int 用,也可以当 float64 用,因为它还没“定型”。
const money = 100
var i int = money // 没问题
var f float64 = money // 也没问题!自动变成 100.0
任务: 使用 iota 定义文件大小单位:KB, MB, GB。
提示:1 << 10 表示 2 的 10 次方 (1024)。
package main
import "fmt"
const (
_ = iota // 0 (忽略)
KB = 1 << (10 * iota) // 1 << 10 = 1024
MB // ?
GB // ?
)
func main() {
fmt.Println("KB =", KB)
fmt.Println("MB =", MB)
fmt.Println("GB =", GB)
}
问题: MB 的值是多少?
答案: MB = 1048576 (1024 * 1024)
解析:
iota=0。iota=1,KB = 1 << 10。iota=2,MB 继承公式 1 << (10 * 2) 即 1 << 20。iota=3,GB = 1 << 30。这就是 iota 的强大之处!