2022-04-06:go中proto文件能跨平台,那是因为能生成不同语言的代码,做框架开发用protoc+插件生成代码是不合适的,需要解析,请问如何解析?
Posted 福大大架构师每日一题
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-04-06:go中proto文件能跨平台,那是因为能生成不同语言的代码,做框架开发用protoc+插件生成代码是不合适的,需要解析,请问如何解析?相关的知识,希望对你有一定的参考价值。
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)
执行结果如下:
以上是关于2022-04-06:go中proto文件能跨平台,那是因为能生成不同语言的代码,做框架开发用protoc+插件生成代码是不合适的,需要解析,请问如何解析?的主要内容,如果未能解决你的问题,请参考以下文章