猿问

为什么我的 golang 程序有这个错误。exec:“lib/synonyms”:文件不存在

我是编程新手,我正在尝试学习 golang。我正在编写练习程序,这个程序称为域查找器,它由子程序组成,其中一个是同义词。我制作了一个 build.bat 文件,将所有程序连接在一起,并将它们放在 lib 文件夹中。domainfinder main.go 然后执行所有程序并在此处一起运行它们是 domainfinder 文件夹中的 main.go 的一部分。如果问题不是很好,我很抱歉我以前从未在这里问过问题。


package main

import(

  "log"

  "os"

  "os/exec"

)

var cmdChain = []*exec.Cmd{

  exec.Command("lib/synonyms"),

  exec.Command("lib/sprinkle"),

  exec.Command("lib/coolify"),

  exec.Command("lib/domainify"),

  exec.Command("lib/available"),

}


拉风的咖菲猫
浏览 115回答 1
1回答

饮歌长啸

exec.Command("lib/synonyms")表示lib/synonyms 相对于运行程序的目录执行文件,而不是相对于main.go源。如果您的项目如下所示:domainfinder/  main.go  lib/    synonyms    sprinkle    coolify    domainify    available该程序仅在从domainfinder/源目录执行时才能工作。在其他任何地方,它将无法找到文件。或者更糟的是,它会执行一些不相关的同名文件。相反,您必须确保这些可执行文件与您的可执行文件一起提供(我不会演示,因为这不是一个好主意)。然后使用os.Executable()查找可执行文件的存储位置并获取与该文件相关的文件。package mainimport(  "os/exec"  "log"  "os"  "path/filepath")func main() {  ex, err := os.Executable()  if err != nil {      panic(err)  }  executableDir := filepath.Dir(ex)  libDir := filepath.Join(executableDir, "lib")  cmd := exec.Command(filepath.Join(libDir, "synonyms"))  stdout, err := cmd.Output()  log.Printf("Command finished with error: %v", err)  log.Printf(string(stdout))}然而,与其调用可执行文件,不如将它们写成 Go 库和函数。这将导致更健壮、更简单和更易于使用的代码。如果您必须有其他可执行文件,请将它们编写为库并提供一个精简的可执行包装器。如何编写 Go 代码涵盖了如何构建 Go 项目。
随时随地看视频慕课网APP

相关分类

Go
我要回答