我正在尝试.pb.go
使用service.proto
Go 中的文件输入生成文件。
有没有办法在不使用protoc
二进制的情况下做到这一点(比如直接使用 package github.com/golang/protobuf/protoc-gen-go
)?
我正在尝试.pb.go
使用service.proto
Go 中的文件输入生成文件。
有没有办法在不使用protoc
二进制的情况下做到这一点(比如直接使用 package github.com/golang/protobuf/protoc-gen-go
)?
如果你有detail.proto
这样的:
message AppDetails {
optional string version = 4;
}
您可以将其解析为如下消息:
package main
import (
"fmt"
"github.com/golang/protobuf/proto"
"github.com/jhump/protoreflect/desc/protoparse"
"github.com/jhump/protoreflect/dynamic"
)
func parse(file, msg string) (*dynamic.Message, error) {
var p protoparse.Parser
fd, err := p.ParseFiles(file)
if err != nil {
return nil, err
}
md := fd[0].FindMessage(msg)
return dynamic.NewMessage(md), nil
}
func main() {
b := []byte("\"\vhello world")
m, err := parse("detail.proto", "AppDetails")
if err != nil {
panic(err)
}
if err := proto.Unmarshal(b, m); err != nil {
panic(err)
}
fmt.Println(m) // version:"hello world"
}
但是你可能会注意到,这个包仍然使用旧的 Protobuf V1。我确实找到了 V2 的拉取请求: