GOLANG "Namespaced"枚举?

标签 go

我了解在 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/

相关文章:

database - 在使用带有 Postgres 的 Go sqlx 包运行 UPDATE 查询时,您能否检索更新行的列表?

go - 如何在 Scylla 和 Go 中查询带有偏移量的限制

github - 支持 GitHub

encryption - 在 Go 和 OpenSSL 中解密文件时的不同结果

go - 如何使用beego的localize?

go - 与多个包共享全局定义的 db conn

go - 使用 golang 如何生成 rsa 证书,然后将私钥导出到 pfx 文件,将公钥导出到 cer 文件

Angular 8 前端不将捕获的数据/字段发送到后端

object - 返回 interface{} 而不是 int64 时的额外分配

go - 获取错误 : all goroutines are asleep - deadlock