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条经验 获得超4个赞
只需使用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 关注
- 128 浏览
添加回答
举报