为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中创建键值的枚举/映射

如何在 Go 中创建键值的枚举/映射

Go
炎炎设计 2023-07-17 14:30:46
我是 Go 的新手,到目前为止很喜欢它,但似乎我找不到一个简单的解决方案。我想创建一个常量,我可以在代码中通过 Key 引用该常量并获取其值我有这个:const (    DBName            = "goApi"    UsersTable string = "users")并希望有一个存储值的表常量变量例子:var Tables = {   UsersTable : "users",   PostsTable : "posts"}//Somewhere else in the codefmt.Println(Tables.UsersTable) //output "users"我怎样才能在 Go 中实现这一目标?
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

在 Go 中您可以声明的内容const仅限于基本类型,如 ints、strings、bools 等。无法将非基本类型(如 structs、maps、slice、funcs 等)声明为const.


因此,要达到目的,Tables.UsersTable您可以将您的声明声明Tables为 struct var:


var Tables = struct{

    UsersTable string

    PostsTable string

}{

    UsersTable: "users",

    PostsTable: "posts",

}

请注意,由于这是一个变量而不是常量,因此没有任何东西可以保护字段的值不被恶意或错误修改。


或者,您的另一个选择是创建一个新包,将其命名为tables,并在其中声明您的常量。


package tables


const (

    UsersTable = "users"

    PostsTable = "posts"

)

然后只需导入包即可使用


import (

    "fmt"

    "path/to/tables"

)


func main() {

    fmt.Println(tables.UsersTable)

}

请注意,第一个解决方案,如果由另一个包导入,将导致fmt.Println(somepkg.Tables.UsersTable) (除非.使用导入),这可能不是您正在寻找的,也可能是。


查看完整回答
反对 回复 2023-07-17
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

你可以这样声明枚举:


const (

    Running = iota       // value --> 0

    Stopped              // value --> 1

    Rebooting            // value --> 2

    Terminated           // value --> 3

)

地图声明也是如此。希望这可以帮助你。


查看完整回答
反对 回复 2023-07-17
  • 2 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信