猿问

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

我是 Go 的新手,到目前为止很喜欢它,但似乎我找不到一个简单的解决方案。


我想创建一个常量,我可以在代码中通过 Key 引用该常量并获取其值


我有这个:


const (

    DBName            = "goApi"

    UsersTable string = "users"

)

并希望有一个存储值的表常量变量


例子:


var Tables = {

   UsersTable : "users",

   PostsTable : "posts"

}


//Somewhere else in the code

fmt.Println(Tables.UsersTable) //output "users"

我怎样才能在 Go 中实现这一目标?


炎炎设计
浏览 91回答 2
2回答

慕桂英546537

在 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 tablesconst (    UsersTable = "users"    PostsTable = "posts")然后只需导入包即可使用import (    "fmt"    "path/to/tables")func main() {    fmt.Println(tables.UsersTable)}请注意,第一个解决方案,如果由另一个包导入,将导致fmt.Println(somepkg.Tables.UsersTable) (除非.使用导入),这可能不是您正在寻找的,也可能是。

海绵宝宝撒

你可以这样声明枚举:const (    Running = iota       // value --> 0    Stopped              // value --> 1    Rebooting            // value --> 2    Terminated           // value --> 3)地图声明也是如此。希望这可以帮助你。
随时随地看视频慕课网APP

相关分类

Go
我要回答