Нет функции для обхода неустановленных флагов командной строки.Однако эту функциональность можно реализовать, взяв разность между флагами, возвращаемыми VisitAll
и Visit
;первый обходит все флаги, а второй обходит установленные флаги:
func UnsetFlags(fs *flag.FlagSet) []*flag.Flag {
var unset []*flag.Flag
fs.VisitAll(func(f *flag.Flag) {
unset = append(unset, f)
})
fs.Visit(func(f *flag.Flag) {
for i, h := range unset {
if f == h {
unset = append(unset[:i], unset[i+1:]...)
}
}
})
return unset
}
Вы можете использовать эту функцию после вызова flag.Parse
, чтобы установить для любых неустановленных флагов значение их среды:
for _, f := range UnsetFlags(flag.CommandLine) {
v := os.Getenv(f.Name)
f.Value.Set(v)
}