#go #makefile #protocol-buffers #proto
#Вперед #makefile #протокол-буферы #прото
Вопрос:
Мне нужно скомпилировать файлы proto и динамически генерировать файлы pb. У меня есть мои команды протокола в Makefile. Я планирую запустить это из функции golang init().
Как я могу вызвать этот Makefile из моего кода golang? Пытался найти решение, но все они подсказывают, как я могу добиться этого наоборот.
Спасибо.
Комментарии:
1. поместите сгенерированные вами файлы в зависимость от вашей команды go. добавьте команду для создания ваших файлов, и это сделает свое дело
2. Использовать godoc.org/os/exec для выполнения таких команд, как make. Компиляция протофайлов является одним из вариантов использования
go generate
команды . Смотрите blog.golang.org/generate
Ответ №1:
В качестве продолжения того, о чем упоминал Muffin Top, я добился этого, используя приведенный ниже код:
import (
"bytes"
"fmt"
"log"
"os/exec"
)
func init() {
e := exec.Command("make", "all")
var out bytes.Buffer
e.Stdout = amp;out
err := e.Run()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Output: %qn", out.String())
}
Ответ №2:
Вы должны использовать синтаксис go:generate:
package main
//go:generate protoc bla bla bla
Когда вы запускаете свою команду «go build», она запускает все в вашем коде с префиксом //go:generate
Комментарии:
1. Мои требования немного отличаются. Этот подход не будет работать для меня
2.
go build
не просматривает инструкции go:generate.go generate
делает. Ни то, ни другое не происходит во время выполнения, что и является целью здесь.