我需要在我的go代码中使用config,并且我想从命令行加载配置路径。 我试试:
if len(os.Args) > 1 {
configpath := os.Args[1]
fmt.Println("1") // For debug
} else {
configpath := "/etc/buildozer/config"
fmt.Println("2")
}
然后我使用config:
configuration := config.ConfigParser(configpath)
当我使用参数(或没有)启动我的go文件时,我收到类似的错误
# command-line-arguments
src/2rl/buildozer/buildozer.go:21: undefined: configpath
我应该如何正确使用os.Args?
答案 0 :(得分:11)
在configPath
范围之外定义if
。
configPath := ""
if len(os.Args) > 1 {
configpath = os.Args[1]
fmt.Println("1") // For debug
} else {
configpath = "/etc/buildozer/config"
fmt.Println("2")
}
请注意configPath =
中的“:=
”(而不是if
)。
这种方式configPath
之前已定义,并且在if
之后仍然可见。
点击“Declarations and scope”/“Variable declarations”了解更多信息。
答案 1 :(得分:0)
对于另一种方法,您可以将逻辑包装在一个函数中:
package main
import "os"
func configPath(a []string) string {
switch len(a) {
case 1: return "/etc/buildozer/config"
default: return os.Args[1]
}
}
func main() {
config := configPath(os.Args)
println(config)
}
这避免了范围界定问题。