Go程序设计(22):枚举
Go程序设计(22):枚举
枚举类型(enum)是和类型的一个特殊情况。枚举是一种具有固定数量可能值的类型,每个值都有唯一的名称。Go 语言没有专门的枚举类型作为独立的语言特性,但可以通过现有的语言惯用法轻松实现枚举。代码语言:go复制package main
import "fmt"
// 我们的枚举类型 ServerState 以 int 类型作为底层类型。
type S
Go程序设计(22):枚举
枚举类型(enum)是和类型的一个特殊情况。枚举是一种具有固定数量可能值的类型,每个值都有唯一的名称。Go 语言没有专门的枚举类型作为独立的语言特性,但可以通过现有的语言惯用法轻松实现枚举。
代码语言:go复制package main
import "fmt"
// 我们的枚举类型 ServerState 以 int 类型作为底层类型。
type ServerState int
// ServerState 的可能取值通过常量定义。特殊关键字 iota 会自动生成连续的常量值,在这种情况下分别为 0、1、2 等。
ct (
StateIdle ServerState = iota
StateConnected
StateError
StateRetrying
)
// 通过实现 fmt.Stringer 接口,ServerState 的值可以被打印或转换为字符串。如果可能的值很多,实现起来会变得繁琐。在这种情况下,可以结合 stringer 工具和 go:generate 指令来自动化该过程。有关详细解释,请参阅[这篇文章](/blog/generate)。
var stateame = map[ServerState]string{
StateIdle: "idle",
StateConnected: "connected",
StateError: "error",
StateRetrying: "retrying",
}
func (ss ServerState) String() string {
return stateame[ss]
}
func main() {
// 如果我们有一个 int 类型的值,无法将其直接传递给 transition 函数——编译器会提示类型不匹配。这为枚举提供了一定程度的编译时类型安全。
ns := transition(StateIdle)
fmt.Println(ns)
ns2 := transition(ns)
fmt.Println(ns2)
}
// transition 模拟服务器的状态转换;它接受当前状态并返回一个新状态。
func transition(s ServerState) ServerState {
switch s {
case StateIdle:
return StateConnected
case StateConnected, StateRetrying:
// 假设我们在这里检查一些谓词来确定下一个状态……
return StateIdle
case StateError:
return StateError
default:
panic(fmt.Errorf("unknown state: %s", s))
}
}
运行结果:
代码语言:javascript代码运行次数:0运行复制$ go run enums.go
connected
idle
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-28 08:26:26
上一篇:Linux调试器
推荐阅读
留言与评论(共有 5 条评论) |
本站网友 山东化工厂爆炸 | 19分钟前 发表 |
1 | |
本站网友 太仓二手房出售 | 26分钟前 发表 |
请参阅[这篇文章](/blog/generate) | |
本站网友 期货基础知识 | 21分钟前 发表 |
panic(fmt.Errorf("unknown state | |
本站网友 中脘穴 | 26分钟前 发表 |
panic(fmt.Errorf("unknown state |