每天三分钟,知识更轻松。 欢迎关注同名微信公众账号极客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 得理解和认识,具体请看下回。