为什么我的golang程序有这个错误。执行:"lib/synonyms":文件不存在



我是编程新手,我正在尝试学习golang。我正在编写练习程序,这个程序称为域查找器,它由子程序组成,其中一个是同义词。我制作了一个构建.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"),
}

exec.Command("lib/synonyms")表示相对于运行程序的目录而不是相对于main.golib/synonyms执行文件。

如果您的项目如下所示:

domainfinder/
main.go
lib/
synonyms
sprinkle
coolify
domainify
available

该程序仅在从domainfinder/源目录执行时才能工作。在其他任何地方,它将无法找到文件。或者更糟糕的是,它将执行一些具有相同名称的不相关文件。

相反,您必须确保这些可执行文件与您的可执行文件一起提供(我不打算演示这一点,因为这不是一个好主意(。然后使用 os。可执行文件(( 查找可执行文件的存储位置并获取与之相关的文件。

package main
import(
"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 项目。

相关内容

最新更新