美文网首页
2、cmd命令行参数解析

2、cmd命令行参数解析

作者: 陈桐Caliburn | 来源:发表于2020-04-22 12:28 被阅读0次

gojvm目录
1、搭建go环境
2、cmd命令行参数解析
3、搜索class文件
4、添加testOption 便于单元测试
5、解析classfile文件
6、运行时数据区
7、指令集
8、解释器
9、创建Class
10、类加载器
11、对象实例化new object
12、方法调用和返回
13 类初始化
14、jvm支持数组
15、jvm支持字符串-数组扩展
16、本地方法调用
17、ClassLoader原理
18、异常处理
19、 启动jvm

执行文件 入参解析

cmd.go

package main

import "flag"
import "fmt"
import "os"

// java [-options] class [args...]
type Cmd struct {
    helpFlag    bool   //java -help
    versionFlag bool   //java -version
    cpOption    string
    class       string // 执行主类
    args        []string // 附加参数
}

//将flag参数转成cmd
func parseCmd() *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")
    //parse失败 会执行 printUsage
    flag.Parse()

    //解析剩余参数
    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])
}

测试类

main.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:%v\n",
        cmd.cpOption, cmd.class, cmd.args)
}

测试命令 run.sh

#!/bin/sh
set -ex
export GOPATH=$PWD
go run . -version | grep -q "version 0.0.1"

go命令

go install 编译
go run 运行

实战项目地址

https://github.com/yinlingchaoliu/jvmgo.git
提交标签 "cmd"

相关文章

  • 手动编写gojvm前言

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

  • 18、异常处理

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

  • 5、解析classfile文件

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

  • 4、添加testOption 便于单元测试

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

  • 2、cmd命令行参数解析

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

  • 3、搜索class文件

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

  • 7、指令集

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

  • 12、方法调用和返回

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

  • 11、对象实例化new object

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

  • 6、运行时数据区

    gojvm目录1、搭建go环境2、cmd命令行参数解析3、搜索class文件4、添加testOption 便于单元...

网友评论

      本文标题:2、cmd命令行参数解析

      本文链接:https://www.haomeiwen.com/subject/xtxiihtx.html