3 回答

TA貢獻1802條經驗 獲得超6個贊
在這種情況下,我什至不認為需要全局變量。您可以讓同步功能接受一個ClientSeteg func sync(c ClientSet)。但是如果你真的需要全局變量,那么你不應該這樣做,除非你希望你的程序在沒有參數存在時發生恐慌。
var (
clientSet = tools.NewClientSet(os.Args[2])
)
您應該做的是為它分配一個默認值或您的類型的零值。
var (
clientSet tools.ClientSet
)
您的主要功能看起來像這樣:
var (
clientSet tools.ClientSet
)
func main() {
if len(os.Args) < 2 {
os.Exit(1)
}
switch os.Args[1] {
case "validate":
validate()
case "sync":
if len(os.Args) < 3 {
os.Exit(1)
}
clientSet = tools.NewClientSet(os.Args[2])
sync()
default:
// place your default case here
}
}
盡管如此,我還是建議您將 a 傳遞ClientSet給 sync 函數,因為它會避免使用全局變量。

TA貢獻1821條經驗 獲得超5個贊
只需使用len(os.Args)函數
var (
clientSet tools.ClientSet
)
func main() {
if len(os.Agrs) == 1 {
// just the file name
} else if len(os.Args) == 2 {
if os.Args[1] == "validate" {
// run validate function, no need for user to have os.Args[2]
} else if os.Args[1] == "sync" {
// sync with no argument show error
}
} else if len(os.Args) == 3 {
if os.Args[1] == "validate" {
clientSet = tools.NewClientSet(os.Args[2])
} else {
// non validate with the second arg
}
} else {
// else, if required
}
}
盡管我建議您不要使用全局變量。盡可能避免。
- 3 回答
- 0 關注
- 193 瀏覽
添加回答
舉報