1

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

我的代码如下所示:

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 后填充地图值?

4

1 回答 1

4

出什么问题了

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

?

于 2013-08-08T07:09:26.860 回答