我是编程的新手,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)
我也应该澄清一下。程序需要能够读取标志参数输入但不能改变那些参数变量
答案 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)
您可以使用flag
包http://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)
}