3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
在這種情況下,我什至不認(rèn)為需要全局變量。您可以讓同步功能接受一個(gè)ClientSeteg func sync(c ClientSet)。但是如果你真的需要全局變量,那么你不應(yīng)該這樣做,除非你希望你的程序在沒(méi)有參數(shù)存在時(shí)發(fā)生恐慌。
var (
clientSet = tools.NewClientSet(os.Args[2])
)
您應(yīng)該做的是為它分配一個(gè)默認(rèn)值或您的類(lèi)型的零值。
var (
clientSet tools.ClientSet
)
您的主要功能看起來(lái)像這樣:
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 函數(shù),因?yàn)樗鼤?huì)避免使用全局變量。

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
答案通常是不使用全局變量。取而代之的是foo
接受一個(gè)參數(shù)foo(clientSet ClientSet)
并僅在需要時(shí)實(shí)例化它。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
只需使用len(os.Args)函數(shù)
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 關(guān)注
- 174 瀏覽
添加回答
舉報(bào)