【问题标题】:Can I obtain a pointer to a map value in golang?我可以在 golang 中获取指向地图值的指针吗?
【发布时间】:2013-08-09 19:16:10
【问题描述】:

我正在尝试使用 Go 的 flag 包来动态生成 FlagSets 并从 flagname -> flag value 收集结果。

我的代码如下所示:

import "flag"

fs := flag.NewFlagSet(strings.Join(commands, " "), flag.ExitOnError)
requiredFlags := []string{"flagA", "flagB"}
flags := make(map[string]string)

for _, f := range requiredFlags { 
    flags[f] = *fs.String(f, "", "") 
}  

这段代码可以编译,但是在解析FlagSet fs之后地图永远不会更新,所以“flagA”和“flagB”的值都是“”。所以这对我来说很有意义; flags 毕竟是 map[string]string 类型,而不是 map[string]*string。不幸的是,我似乎无法使用指针来解决这个问题。我已经尝试了所有我能想到的引用和解除引用的组合,我最终得到一个 nil 指针解除引用(运行时错误)或无效的间接引用(编译时错误)。

如何设置地图和 FlagSet,以便在解析 FlagSet 后填充地图值?

【问题讨论】:

    标签: go


    【解决方案1】:

    有什么问题

    flags := make(map[string]*string)
    for _, f := range requiredFlags { 
        flags[f] = fs.String(f, "", "") 
    }
    ...
    println(*(flags["flagA"]))
    

    ?

    【讨论】:

    • 什么都没有。我以为我试过了,但事实证明我没有。谢谢!
    • 在阅读问题标题和回复时,我的感受有所不同。简而言之,我们无法获取映射值的地址。见this question.
    猜你喜欢
    • 2016-08-11
    • 2019-06-12
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2017-02-01
    • 2015-06-17
    相关资源
    最近更新 更多