分享
  1. 首页
  2. 文章

用Go编写JVM之小试牛刀

x_zhaohu · · 1556 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

源于只因遇见Go,被Go的魅力所折服,慢慢将发生下面的故事

Ubuntu下Go的安装

Go的安装方式有好几种,可以根据自己的系统版本,下载对应的文件.分享下我的安装方式,笔者系统版本是linux(ubuntu)64位,往后都是基于Liunx(Ubuntu)进行分享.

  • 下载Go的源码
  • 解压源码--->自定义文件夹
  • 设置环境变量
    • GOROOT:export GOROOT=/home/ubuntu/go/,Go源码文件夹所在地址
    • GOPATH: export GOPATH=/home/ubuntu/workspace/,Go代码存放位置
    • PATH:export PATH=$PATH:$GOROOT/bin:$GOPATH/bin,设置下系统环境变量

注意:说明下,根据本地脚本的类型在响应的配置文件中修改变量,比如:我的是zsh, 我就需要在.zshrc中修改

完成上述操作后,我们可以命令行中敲入go,验证是否安装成功,类似java命令.

小试牛刀

安装Go之后,我们可以在workspace中编写我们的Go代码了吗?可以,但是我们要管理我们程序结构,所以workspace中需要三个文件夹:

  • bin: 编译之后可执行文件
  • pkg: 应用包
  • src:应用源码(我们编写的代码)

在src目录下创建jvmgo工程,再在jvmgo文件下创建子目录ch01,我工程目录图如下:


workspace.jpg

简单实现命令行设置,执行效果如下:


result.jpg

命令解释:

  • go build : 编译代码,默认生成与文件相同的可执行文件
  • ch01 -version: ch01,编译后生成的可执行文件,-version, 预定义命令.
  • ch01 -help: ch01,编译后生成的可执行文件,-help, 预定义命令.

实现思路:

  • 编写命令行工具文件,定义命令行信息,如:terminal.go
  • 利用flag模块预先定义命令
  • 编写main函数测试执行

在/ch01/文件夹下创建terminal.go文件,定义命令行信息,并预定义命令:

//定义命令行信息,Termial结构体
type Terminal struct {
 helpFlag bool // -help
 versionFlag bool // -version
 cpOption string // -cp
 class string // 指定class
 args []string //参数
}
//预先定义命令
func parseTerminal() *Terminal {
 //定义一个terminal结构体, 因c,c++,go存在指针,所以yong"&Terminal{}",将地址给terminal
 terminal := &Terminal{}
 /*定义命令行参数*/
 flag.Usage = printUsage
 flag.BoolVar(&terminal.helpFlag, "help", false, "print help message")
 flag.BoolVar(&terminal.helpFlag, "?", false, "print help message")
 flag.BoolVar(&terminal.versionFlag, "version", false, "print version and exit")
 flag.StringVar(&terminal.cpOption, "classpath", "", "classpath")
 flag.StringVar(&terminal.cpOption, "cp", "", "classpath")
 //命令行参数解析
 flag.Parse()
 args := flag.Args()
 if len(args) > 0 {
 terminal.class = args[0]
 terminal.args = args[1:]
 }
 return terminal
}

在/ch01/文件下创建main.go文件,测试:

package main
import "fmt"
func main() {
 terminal := parseTerminal()
 if terminal.versionFlag {
 fmt.Println("version 0.0.1")
 } else if terminal.helpFlag || terminal.class == "" {
 printUsage()
 } else {
 startJVM(terminal)
 }
}
func startJVM(terminal *Terminal) {
 fmt.Printf("classpath:%s class:%s args:%v\n", terminal.cpOption, terminal.class, terminal.args)
}

注:上述代码算是伪代码吧, 源文件还请移步源码

参考文献:


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:x_zhaohu

查看原文:用Go编写JVM之小试牛刀

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1556 次点击
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏