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)
	}
}

执行结果如下:

在这里插入图片描述