参考文献:
flag package - flag - Go Packages
使用:
Go
import "flag"
var nFlag = flag.Int("n", 1234, "help message for flag n")
上述方法返回的是一个指针变量nFlag,如果我们要打印,应该使用如下方式:
Go
fmt.Println("ip has value: ", *nFlag)
或者可以使用IntVar来返回值:
Go
var flagvar int
func init() {
flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}
可以直接打印:
Go
fmt.Println("flagName is: ", flagValue)
在打印前应该加上flag.Prase()显示解析我们的参数值
示例代码:
Go
package main
import (
"flag"
"fmt"
"os"
)
type Cmd struct {
helpFlag bool
versionFlag bool
cpOption string
class string
args []string
}
func parseCmd() *Cmd {
// 创建一个指向Cmd结构体类型的指针变量cmd,并将其初始化为一个空的Cmd结构体实例
cmd := &Cmd{}
flag.Usage = printUsage
flag.BoolVar(&cmd.helpFlag, "help", false, "print help message")
flag.BoolVar(&cmd.helpFlag, "?", false, "print help message")
flag.BoolVar(&cmd.versionFlag, "version", false, "print version and exit")
flag.StringVar(&cmd.cpOption, "classpath", "", "classpath")
flag.StringVar(&cmd.cpOption, "cp", "", "classpath")
flag.Parse()
args := flag.Args()
if len(args) > 0 {
cmd.class = args[0]
cmd.args = args[1:]
}
return cmd
}
func printUsage() {
// os.Args 存放传递给命令行的全部参数
fmt.Printf("Usage: ·%s [-options] class [args...]\n", os.Args[0])
}
运行类:
Go
package main
import "fmt"
func main() {
cmd := parseCmd()
if cmd.versionFlag {
fmt.Println("version 0.0.1")
} else if cmd.helpFlag || cmd.class == "" {
printUsage()
} else {
startJVM(cmd)
}
}
func startJVM(cmd *Cmd) {
fmt.Printf("classpath:%s class:%s args:%s args:%v\n",
cmd.cpOption, cmd.class, cmd.args)
}