Как скомпилировать программу находясь на каталог выше go.mod?
У меня есть программа которая компилирует другие программы: compiler.go:
package main
import (
"os"
"os/exec"
)
func main() {
cmd := exec.Command("go", "build", "projects/helloword/main.go")
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
cmd.Run()
}
Всё дерево каталогов выглядит так:
.
├── compiler <- Исполняемый файл который билдит проект ниже.
└── projects
└── helloword
├── go.mod
├── hi
│ └── hi.go
└── main.go
Проблема в том что насколько я понял компилятор не видит go.mod так как go build запускается на каталог выше go.mod.
projects/helloword/main.go:3:8: no required module provides package github.com/c0caina/helloword/hi: go.mod file not found in current directory or any parent directory; see 'go help modules'
Как скомпилировать проект из другой программы?
Я не могу опустить compiler на уровень ниже что бы он находился в одной папке с go.mod.
Есть какие то другие способы скомпилировать?
Например вызвать exec.Command не в том же месте где лежит исполняемый файл а в каталоге helloword. Или может есть какой то другой способ об котором я не догадываюсь?
Ответы (1 шт):
в cmd есть специальное поле Dir, отвечающее за рабочую директорию. можно ее определить, задать из какой директории будет выполняться программа.
cmd := exec.Command("go", "build", "projects/helloword/main.go")
cmd.Dir = "/path/to/dir/"
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
cmd.Run()