每天三分钟,知识更轻松。 欢迎关注同名微信公众账号极客24h。
枚举将相关常数归为一种类型。
例子- 分组获取内容相关得值
- 避免使用无效值
- 提高代码的可读性和可维护性
例如,假设您要为工作日创建一个枚举。
每个常量将具有相同的类型:Weekday
type Weekday int
★ 第二步:为Weekday 声明相关常量
给他们赋予不同数值,以防冲突。
const ( Sunday Weekday = 0 Monday Weekday = 1 Tuesday Weekday = 2 Wednesday Weekday = 3 Thursday Weekday = 4 Friday Weekday = 5 Saturday Weekday = 6 ) fmt.Println(Sunday) // prints 0 fmt.Println(Saturday) // prints 6
为枚举Weekday 创建共同行为
您将方法附加到类型以定义其行为。
附加的方法将是Weekday的不可分割的部分,并在Weekday常量之间共享。
func (day Weekday) String() string {
// declare an array of strings
// ... operator counts how many
// items in the array (7)
names := [...]string{
"Sunday",
" Monday ",
"Tuesday",
" Wednesday ",
" Thursday ",
"Friday",
"Saturday"}
// → `day`: It's one of the
// values of Weekday constants.
// If the constant is Sunday,
// then day is 0.
//
// prevent panicking in case of
// `day` is out of range of Weekday
if day < Sunday || day > Saturday {
return "Unknown"
}
// return the name of a Weekday
// constant from the names array
// above.
return names[day]
}
fmt.Printf("Which day it is? %s\n", Sunday)
// Which day it is? Sunday
func (day Weekday) Weekend() bool {
switch day {
case Sunday, Saturday: // If day is a weekend day
return true
default: // If day is not a weekend day
return false
}
}
fmt.Printf("Is Saturday a weekend day? %t\n", Saturday.Weekend())
// Is Saturday a weekend day? true
如何使用iota
其他常量将重复Iota表达式,直到出现另一个赋值或类型声明。
除了空行和注释行,iota每行之后都增加1。
什么时候不用iota
//server status const ( RestartMarkerReply = 110 ServiceReadyInNMinutes = 120 CommandOK = 200 CommandNotImplemented = 202 // ... )
这部分会提高你对iota 得理解和认识,具体请看下回。