如何正确使用golang中的os.Args?

时间:2014-04-21 08:21:33

标签: command-line go

我需要在我的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?

2 个答案:

答案 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)
}

这避免了范围界定问题。