Go语言 如何使用字符串动态检索变量

bfrts1fy  于 2022-12-07  发布在  Go
关注(0)|答案(2)|浏览(201)

比如说:

type client struct{}
var s :="client"
var b := new (s)  //get a struct client

背景:有一些变量像client_1client_2。现在我尝试通过请求参数client(作为字符串)来检查client_x是否存在。
结果是:

  • 存在client_1
  • client_3不存在

然后我可以检索变量client_1并使用它。

kr98yfug

kr98yfug1#

你不能有map的类型,如果这就是你要问的:

package something

// syntax error: unexpected type, expecting type
var types = make(map[string]type)

但是您可以Mapinterface{},并将每个类型设置为默认值:

package main

var types = map[string]interface{}{"bool": false, "int": 0, "string": "hello"}

func main() {
   s := types["string"]
   t := s.(string)
   println(t == "hello")
}
chy5wohz

chy5wohz2#

最好的情况是,如果您想按名称创建一个新类型,您可以将工厂函数放在Map中。

type client struct{}
var types = map[string]func()interface{}{
    "client": func() interface{} { return new(client) },
}

类型map[string]func()interface{}只是“从字符串到不带参数并返回interface{}的函数的Map“。
然后可以按名称调用工厂函数:

func main() {
    s := "client"
    b := types[s]()
    _ = b
}

您可以为函数的返回类型选择interface{}或更具体的接口,但Map中所有函数的类型必须相同。

相关问题