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 项目。
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报