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

Object 如何在Go中创建键值的枚举/映射,object,go,enums,Object,Go,Enums,到目前为止,我还是一个新手,喜欢它,但似乎我找不到一个简单的解决办法 我想创建一个常量,我可以通过键在代码中引用它,并获取它的值 我有这个: const ( DBName = "goApi" UsersTable string = "users" ) 并希望有一个存储该值的Tables常量变量 例如: var Tables = { UsersTable : "users", PostsTable : "posts" } //Somewhere

到目前为止,我还是一个新手,喜欢它,但似乎我找不到一个简单的解决办法

我想创建一个常量,我可以通过键在代码中引用它,并获取它的值

我有这个:

const (
    DBName            = "goApi"
    UsersTable string = "users"
)
并希望有一个存储该值的Tables常量变量

例如:

var Tables = {
   UsersTable : "users",
   PostsTable : "posts"
}

//Somewhere else in the code
fmt.Println(Tables.UsersTable) //output "users"

如何在Go中实现这一点?

您可以这样声明枚举:

const (
    Running = iota       // value --> 0
    Stopped              // value --> 1
    Rebooting            // value --> 2
    Terminated           // value --> 3
)
地图声明也是这样的。 希望这能对你有所帮助。

在Go中可以声明为常量的内容仅限于基本类型,如int、string、bools等。无法将非基本类型(如结构、映射、切片、函数等)声明为常量

因此,要访问Tables.UsersTable,您可以将表声明为结构变量:

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

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

package tables

const (
    UsersTable = "users"
    PostsTable = "posts"
)
然后您可以通过简单地导入包来使用它

import (
    "fmt"
    "path/to/tables"
)

func main() {
    fmt.Println(tables.UsersTable)
}

请注意,第一个解决方案如果由另一个包导入,将导致fmt.Printlnsomepkg.Tables.UsersTable,除非出现错误。使用的导入可能不是您想要的,也可能是。地图不能是常量。您当前的常数。。。声明是正确的方式。嘿@Bryant谢谢你的回答。我更感兴趣的是创建一个const变量,它只存储有关我可以访问的表的常量。例如:var表{UserTable:users,PostTable:posts}。并尝试使用Tables.usertable访问它。我认为您不能这样做。如果使常量变量指向一个映射,这只意味着不能使该变量指向另一个映射,但映射中的键值可以更改,键值不是常量。
import (
    "fmt"
    "path/to/tables"
)

func main() {
    fmt.Println(tables.UsersTable)
}