参考文献:
flag package - flag - Go Packages
使用:
import "flag"
var nFlag = flag.Int("n", 1234, "help message for flag n")
上述方法返回的是一个指针变量nFlag,如果我们要打印,应该使用如下方式:
fmt.Println("ip has value: ", *nFlag)
或者可以使用IntVar来返回值:
var flagvar int
func init() {flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}
可以直接打印:
fmt.Println("flagName is: ", flagValue)
在打印前应该加上flag.Prase()显示解析我们的参数值
示例代码:
package mainimport ("flag""fmt""os"
)type Cmd struct {helpFlag boolversionFlag boolcpOption stringclass stringargs []string
}func parseCmd() *Cmd {// 创建一个指向Cmd结构体类型的指针变量cmd,并将其初始化为一个空的Cmd结构体实例cmd := &Cmd{}flag.Usage = printUsageflag.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])
}
运行类:
package mainimport "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)
}