go - 如何从 map 界面获取/设置值?

标签 go

这是我想要做的。

person := map[string]int {
    "age": 20,
}
var p interface{} = person
v := reflect.ValueOf(p)
// I want to get/set the value of age here from v e.g. v["age"]
// how can I do that

最佳答案

不需要使用reflect,您可以键入断言:

person := map[string]int{
    "age": 20,
}
var p interface{} = person
age := p.(map[string]int)["age"] // get
p.(map[string]int)["something"] = 10 //set
编辑:似乎您的问题是关于您不知道 map 键/值类型的情况。在这种情况下,您可以使用以下命令遍历 map 元素:
v := reflect.ValueOf(p)
itr := v.MapRange()
for itr.Next() {
    fmt.Println(itr.Key(), itr.Value())
}
或者,如果您需要特定的元素,请使用:
v.MapIndex(reflect.ValueOf("age")) // returns 20
同样,为了设置新值,您可以:
v.SetMapIndex(reflect.ValueOf("somekey"), reflect.ValueOf(7))

关于go - 如何从 map 界面获取/设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66081036/

相关文章:

arrays - Golang-无效的数组绑定(bind)

memory - 为什么 golang 中的内存没有减少?

go - 如何将我的 AppHandler 添加到我的路由中?

go - 如何在 Go 中使用 Cli 访问一组命令?

c++ - 在go中删除内存

json - 你如何在 Golang 中修改这个结构来接受两个不同的结果?

go - 运行 Hello Couchbase 应用程序时出现紧急运行时错误

sql - 在插入或更新时返回数据时,我还需要使用 `Exec` 吗?

python - 写入后无法使用 go 从文件中读取字节

go - 如何使用 Go 串行库检查线路状态(RS232)