1 回答

TA貢獻1951條經(jīng)驗 獲得超3個贊
exec.Command("lib/synonyms")表示lib/synonyms 相對于運行程序的目錄執(zhí)行文件,而不是相對于main.go源。
如果您的項目如下所示:
domainfinder/
main.go
lib/
synonyms
sprinkle
coolify
domainify
available
該程序僅在從domainfinder/源目錄執(zhí)行時才能工作。在其他任何地方,它將無法找到文件?;蛘吒愕氖牵鼤?zhí)行一些不相關(guān)的同名文件。
相反,您必須確保這些可執(zhí)行文件與您的可執(zhí)行文件一起提供(我不會演示,因為這不是一個好主意)。然后使用os.Executable()查找可執(zhí)行文件的存儲位置并獲取與該文件相關(guān)的文件。
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))
}
然而,與其調(diào)用可執(zhí)行文件,不如將它們寫成 Go 庫和函數(shù)。這將導(dǎo)致更健壯、更簡單和更易于使用的代碼。如果您必須有其他可執(zhí)行文件,請將它們編寫為庫并提供一個精簡的可執(zhí)行包裝器。
如何編寫 Go 代碼涵蓋了如何構(gòu)建 Go 項目。
- 1 回答
- 0 關(guān)注
- 127 瀏覽
添加回答
舉報