2022-04-06:go中proto文件能跨平台,那是因为能生成不同语言的代码,做框架开发用protoc+插件生成代码是不合适的,需要解析,请问如何解析?
答案2022-04-06:
go get github.com/emicklei/proto,用这个包就可以解析。
proto文件内容如下:
// Copyright 2022-03-24 北京xx科技有限公司
syntax = "proto3";
import "google/api/annotations.proto";
package demo;
option go_package = "github.com/moonfdd/gencodebyproto/protoc-gen-go/demo";
// 入参
message Request {
// 测试入
string ping = 1;
}
// 出参3
// 出参1
// 出参2
message Response {
// 测试出
string pong = 1;
}
// 类00
// 类11
service Haha {
// 方法
rpc Ping(Request) returns(Response){
option (google.api.http) = {
post: "/a/v1/b/c"
body: "*"
};
}
}
// 类4
service Haha4 {
// 方法
rpc Ping(Request) returns(Response){
option (google.api.http) = {
post: "/d/v1/e/f"
body: "*"
};
}
}
golang代码如下:
package main
import (
"fmt"
"os"
"github.com/emicklei/proto"
)
func main() {
reader, _ := os.Open("../../proto/demo/haha.proto")
defer reader.Close()
parser := proto.NewParser(reader)
definition, _ := parser.Parse()
for _, d := range definition.Elements {
fmt.Printf("%T %+v\r\n", d, d)
}
}
执行结果如下: