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+插件生成代码是不合适的,需要解析,请问如何解析?的主要内容,如果未能解决你的问题,请参考以下文章

PHP使用gRPC请求GO服务实战

在 Go 中编译 google-fhir 原型文件时出错

gRPC在Go中的使用

gRPC在Go中的使用

一定义 protobuf 消息并生成 Go 代码

protoc编译器使用 grpc 插件编译 .proto 文件