我如何 run/call 来自 golang 代码的 Makefile?

How can I run/call a Makefile from golang code?

我需要编译proto文件,动态生成pb文件。我在 Makefile 中有我的 protoc 命令。我打算从 golang init() 函数触发它。

如何从我的 golang 代码中调用这个 Makefile?尝试寻找解决方案,但所有这些都建议我如何通过相反的方式实现这一目标。

谢谢。

您应该使用 go:generate 语法:

package main

//go:generate protoc bla bla bla

当您 运行 您的“go build”命令时,它将 运行 您代码中的所有内容都以 //go:generate

为前缀

https://golang.org/pkg/cmd/go/internal/generate/

作为 Muffin Top 提到的内容的延续,我使用以下代码实现了这一点:

import (
    "bytes"
    "fmt"
    "log"
    "os/exec"
)

func init() {
    e := exec.Command("make", "all")
    var out bytes.Buffer
    e.Stdout = &out
    err := e.Run()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Output: %q\n", out.String())
}