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

执行结果如下:

在这里插入图片描述

posted @   福大大架构师每日一题  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2021-04-06 2021-04-06:假设有一个源源吐出不同球的机器,只有装下10个球的袋子,每一个吐出的球,要么放入袋子,要么永远扔掉。如何做到机器吐出每一个球之后,所有吐出的球都等概率被放进袋子里。
点击右上角即可分享
微信分享提示