Go语言exec调用hangman.go/编译后exe提示可执行文件不在$PATH问题
问题根因
你当前代码中exec.Command传入的参数是源码文件hangman.go,系统无法将Go源码文件识别为可执行程序,哪怕你已经编译出了hangman.exe,只要代码里调用的文件名没改,就会继续报找不到可执行文件的错误。
解决步骤
方案1:直接调用编译好的可执行文件
修改server.go中的exec.Command参数,指向你编译好的hangman.exe:// 如果hangman.exe和server程序在同一目录 cmd := exec.Command("./hangman.exe")如果
hangman.exe不在当前运行目录,你可以写完整的绝对路径,比如:cmd := exec.Command("C:/projects/hangman/hangman.exe")也可以将
hangman.exe所在目录加入系统PATH环境变量,此时直接写文件名即可:cmd := exec.Command("hangman.exe")方案2:不提前编译,直接通过go run执行源码
如果你不想每次修改hangman代码都重新编译,可以调用go命令执行源码,注意要把go和run作为单独的参数传入:cmd := exec.Command("go", "run", "./hangman.go")该方案需要你的系统PATH中已经配置了Go的安装路径。
附加提示
如果hangman游戏需要交互输入、需要在控制台打印内容,你还需要将命令的输入输出绑定到当前进程,避免看不到游戏输出、无法输入操作的问题,修改后的完整代码如下:
package main import ( "log" "os" "os/exec" ) func main() { // 这里替换为你选择的方案对应的exec.Command参数 cmd := exec.Command("./hangman.exe") // 绑定输入输出 cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err := cmd.Run() if err != nil { log.Fatal(err) } }
内容的提问来源于stack exchange,提问作者Esteban
相关产品推荐
相关产品推荐

