如何在if语句中使用命令行中的参数?

时间:2014-06-13 18:11:40

标签: if-statement for-loop command-line go

我是编程的新手,golang是我的第一语言,我在解决如何从命令行访问变量时遇到了一些问题。我试图在用户的命令行中输入标志,并在if语句中使用这些变量。我希望for循环遍历用户输入的所有参数,然后在if语句中比较每个参数,看看是否与特定标志匹配。所有println语句都用于测试目的。我怎么能正确地写这个for loop / if语句?

var Args []string

for i := range os.Args {
    fmt.Println("array item", i, "is", os.Args[i])

    if i := os.Args("-target") {
        fmt.Println("GREAT SUCCESS")
        targetHostNew := targetHost
    }
}

fmt.Println("-------------------------", targetHostNew)

我也应该澄清一下。程序需要能够读取标志参数输入但不能改变那些参数变量

2 个答案:

答案 0 :(得分:3)

您需要在调用os.Args后通过flag.Parse()访问变量,或使用flag包将变量分配给变量。

在两者上查看此示例:

package main

import (
    "fmt"
    "os"
    "flag"
)

func main() {
    // declare variable
    var targetHost string

    // tell flags to put cmd line (string) arg into variable
    flag.StringVar(&targetHost, "target", "defaultValue", "")

    // do the actual parsing of command line variables
    flag.Parse()

    // loop over all arguments by index and value
    for i, arg := range os.Args {
        // print index and value
        fmt.Println("item", i, "is", arg)
    }

    // is targetHost defaultValue - then it wasn't set on the command line
    if targetHost == "defaultValue" {
        fmt.Println("target not set")
    } else {
        fmt.Println("target set to", targetHost);
    }
}

答案 1 :(得分:2)

您可以使用flaghttp://golang.org/pkg/flag/

package main

import (
    "flag"
    "fmt"
)

var ip = flag.String("target", "localhost:3000", "help message for target")

func main() {
    flag.Parse()
    fmt.Println(*ip)
}