2 回答

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個贊
使用flag.VisitAll聲音有點(diǎn)復(fù)雜;我建議獲取具有合理默認(rèn)值的環(huán)境變量并將其用作標(biāo)志的默認(rèn)值 - 這意味著如果未設(shè)置標(biāo)志,環(huán)境變量將成為后備:
package main
import (
? ? "flag"
? ? "fmt"
? ? "os"
)
func GetEnvDefault(key, def string) string {
? ? v := os.Getenv(key)
? ? if v == "" {
? ? ? ? return def
? ? }
? ? return v
}
func main() {
? ? // Uncomment to test behaviour
? ? // os.Setenv("SERVER_NAME", "donaldduck")
? ? var serverName string
? ? flag.StringVar(&serverName, "n", GetEnvDefault("SERVER_NAME", "mickeymouse"), "The human name for the server")
? ? flag.Parse()
? ? fmt.Println(serverName)
}

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個贊
沒有遍歷未設(shè)置的命令行標(biāo)志的功能。VisitAll
但是,可以通過取和返回的標(biāo)志之間的差異來實(shí)現(xiàn)此功能Visit
;前者遍歷所有標(biāo)志,而后者遍歷設(shè)置的標(biāo)志:
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
}
您可以在調(diào)用后使用該函數(shù)flag.Parse將任何未設(shè)置的標(biāo)志設(shè)置為其環(huán)境值:
for _, f := range UnsetFlags(flag.CommandLine) {
? ? v := os.Getenv(f.Name)
? ? f.Value.Set(v)
}
- 2 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報(bào)