我了解在 GO 中创建枚举的惯用方式如下:
type topicStatus int
const (
registered topicStatus = iota
active
inactive
pending-removal
removed
)
但如果我有另一个“枚举”想要“重用”一个名称,我会收到错误:
type hotelVisit int
const (
registered hotelVisit = iota
checked-in
checked-out
)
在这里,如果我尝试这个,我无法区分 topicStatus.registered 和 hotelVisit.registered,因为之前使用了“已注册” - 有没有办法对“枚举”名称进行“命名空间”?
最佳答案
使用可能导致命名冲突的许多常见单词小写标识符污染命名空间并不是我认为惯用的 Go 语言。创建包以保存少量常量声明也是如此。
我可能会这样做:
type topicStatus int
const (
tsRegistered topicStatus = iota
tsActive
tsInactive
tsPendingRemoval
tsRemoved
)
type hotelVisit int
const (
hvRegistered hotelVisit = iota
hvCheckedIn
hvCheckedOut
)
现在您可以使用 ts := tsPendingRemoval
进行声明和初始化。简洁明了,命名冲突的风险很小。
关于GOLANG "Namespaced"枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23459224/