手写 iota 定义一周七天有3种常见写法:基础版从0开始自动递增(Sunday=0);偏移版加1使Sunday=1;增强版添加String()方法实现友好字符串输出,推荐实际使用。

手写 iota 定义一周七天,核心是利用 Go 语言中 iota 的自增特性,配合枚举习惯和可读性需求。常见写法有 3 种,区别在于是否显式赋值、是否添加别名、是否支持字符串化。
基础版:纯 iota + 常量名直译
最简洁直接的写法,适合快速表达枚举逻辑:
type Weekday int const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturday )
说明:从 0 开始自动递增,Sunday=0,Saturday=6。语义清晰,符合 Go 标准库(如 time.Weekday)惯例。
偏移版:iota + 偏移量(让 Sunday = 1)
若业务要求周日为第 1 天(而非第 0 天),可加偏移:
type Weekday int const ( Sunday Weekday = iota + 1 Monday Tuesday Wednesday Thursday Friday Saturday )
说明:iota 仍从 0 起,但首项加 1,结果为 Sunday=1 到 Saturday=7。注意后续常量仍按顺序递增,无需重复写 +1。
增强版:带 String() 方法 + 显式字符串映射
让类型支持打印友好输出,提升调试与日志可读性:
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
func (w Weekday) String() string {
names := []string{
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
}
if w < 0 || int(w) >= len(names) {
return "Weekday(?)"
}
return names[w]
}
说明:实现了 fmt.Stringer 接口,调用 fmt.Println(Sunday) 会输出 "Sunday" 而非 0。数组索引与 iota 值严格对齐,安全且高效。
不复杂但容易忽略细节:iota 只在 const 块内重置;每行一个常量最稳妥;String() 方法建议加越界检查。实际项目中,第三种最实用。









