新手刚接触go语言 请教下为什么我编译好的exe 总是闪退

代码如下
这是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)
}

这是cmd.go

package main

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

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

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 exist")
    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() {
    fmt.Printf("Usage: %s [-options] class [args...]\n", os.Args[0])
}

编译出来的exe打开就闪退 请问为什么

共 4 个回复


stevewang

执行结束自然会退出。
你预期看到什么结果呢?

# 0

lintBai

这不是闪退,是程序执行结束了,最简单直接的就是在程序最后加一个scanf,让程序执行到这里等待输入,然后随便输入一个值,程序退出

# 1

zhyw

目测楼主看的是自己动手写java虚拟机。哈哈哈

# 2

jthmath

不要双击,而是在 cmd 中执行,就不会闪退了

# 3