1

Go のフラグ パッケージを使用して、FlagSet を動的に生成し、フラグ名 -> フラグ値からマップに結果を収集しようとしています。

私のコードは次のようになります。

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