为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
拉风的咖菲猫 2022-05-10 17:14:34
我是编程新手,我正在尝试学习 golang。我正在编写练习程序,这个程序称为域查找器,它由子程序组成,其中一个是同义词。我制作了一个 build.bat 文件,将所有程序连接在一起,并将它们放在 lib 文件夹中。domainfinder main.go 然后执行所有程序并在此处一起运行它们是 domainfinder 文件夹中的 main.go 的一部分。如果问题不是很好,我很抱歉我以前从未在这里问过问题。package mainimport(  "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"),}
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

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


如果您的项目如下所示:


domainfinder/

  main.go

  lib/

    synonyms

    sprinkle

    coolify

    domainify

    available

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


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


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 项目。


查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信