Go语言处理命令行参数

java命令行解析工具

完成一个命令行工具,该命令行工具解析java的命令行

知识背景:

java命令总共有四类格式:
java [-options] class [args]
java [-options] -jar jarfile [args]
javaw [-options] class [args]

javaw [-options] -jar jarfile [args]

主要传递三种参数:选项、主类名(或者JAR文件名)以及main()方法参数。

选项由减号(-)开头,第一个非选项名给出了主类的完全限定名。

如果给出了-jar选项,则第一个非选项参数表示JAR文件名,java命令必须从这个JAR文件中寻找主类。

javaw和java命令唯一的区别在于,javaw显示命令行窗口后不会堵塞,会继续执行接下来的命令。

java命令行的选项可以分为两种:标准选项和非标准选项。标准选项比较稳定,不会轻易变动,非标准的选项以-X开头。非标准选项中有一部分是高级选项,以-XX开头。

选项 用法
-version 输出版本信息,然后退出
-?/-help 输出帮助信息,然后退出
-cp / -classpath 指定用户类路径
-Dproperty=value 设置Java系统属性
-Xms 设置初始堆空间大小
-Xmx 设置最大堆空间大小
-Xss 设置线程栈空间大小

go语言的os包中定义了一个Args变量,用来存放传递给命令行的全部参数。Go语言又内置了flag包,帮助我们处理命令行选项。具体处理代码如下所示:

package main

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

type Cmd struct {
    
    
	helpFlag    bool
	versionFlag bool
	cpOption    string
	class       string
	args        []string
}

func parseCmd() *Cmd {
    
    

	cmd := &Cmd{
    
    }
// Usage被赋值函数,当在parse flag出现错误时,会调用Usage函数
	flag.Usage = printUsage
// BoolVar方法用来获取命令行中-help选项后面的值,默认是false
	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")
// Parse方法根据命令行参数列表vars,解析命令行
	flag.Parse()

// 在Parse方法成功执行之后,使用Args方法返回参数列表
// 其中第一个参数是主类名
	args := flag.Args()
	if len(args) > 0 {
    
    
		cmd.class = args[0]
		cmd.args = args[1:]
	}

	return cmd
}

func printUsage() {
    
    
	fmt.Printf("Usage: %s [-options] class [args...]\n", os.Args[0])
}

更多测试代码详见此代码仓

猜你喜欢

转载自blog.csdn.net/sinat_28199083/article/details/128681141