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+插件生成代码是不合适的,需要解析,请问如何解析?的更多相关文章
- grpc proto文件生成java、.net实体类以及客户端代码
背景 工作中对接对方服务是GRPC,对方只提供了proto契约文件,需要自己生成对应的实体类以及客户端代码,故记录下操作流程. Java 代码生成 实体类: 通过protoc插件生成实体类 在 htt ...
- Json--Android中数据文件解析(Json解析--从服务器端获取数据并且解析,显示在客户端上面)
前面学习过了使用SAX解析XML数据(点击进入:SAX解析XML数据),今天学习Json解析: 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据 ...
- Caffe源码中caffe.proto文件分析
Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下caffe.proto文件. 在src/caffe/proto目录下有一个 ...
- Android中XML文件的序列化生成与解析
xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...
- Android学习记录(1)—Android中XML文件的序列化生成与解析
xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...
- MFC Wizard创建的空应用程序中各个文件内容的解析
创建的MFC应用程序名为:wd,那么: 一.wd.h解析 // wd.h : main header file for the WD application // #if !defined(AFX_W ...
- Import “google/api/annotations.proto“ was not found or had errors.问题;proto 中外部引入proto文件问题解决方案
问题 在proto 中引入了一些其他 proto 文件的情况下会出现was not found or had errors.问题 在使用Kratos框架时proto文件引入import "g ...
- C语言中头文件和cpp文件解析
务必提前预读这里的内容:http://www.cnblogs.com/stemon/p/3999844.html 回到cpp文件与头文件各写什么内容的话题上: 理论上来说cpp文件与头文件里的内容,只 ...
- Android中asset文件夹与raw文件夹的区别深入解析(转)
*res/raw和assets的相同点:1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制.*res/raw和assets的不同点:1.res/raw中的文件会被映射到R.j ...
- 【Python】解析Python中的文件操作
目录结构: contents structure [-] 简介 Python中的文件类型 内置函数的文件操作 open()函数 Mode 创建文本文件 读取文本文件 循环文件对象 关闭文件 With语 ...
随机推荐
- Vue3中,如何获取在for循环中设置的ref对象
思考: for循环中,如果给每一个元素绑定一个特定的ref值(ref="xxx"),那么就要定义N多个变量来分别接受它们,显然不现实. 通过改变ref的绑定方式(:ref=&quo ...
- LP两阶段法(一阶段)
\begin{equation}\begin{aligned}\min \quad & z=\mathbf{c}^{T} \mathbf{x} \\\text { s.t. } & \ ...
- STM32 系统初始化
#include "system.h" void system_init(void){ //系统中断设置,抢占优先级0~15,无子优先级 NVIC_PriorityGroupCon ...
- Neo4j学习(3)--JavaAPI
Neo4j Java操作 1. Neo4j Java Driver方式操作 使用该方式对数据进行操作时,必须先将Neo4j的服务启动起来. 从官方下载neo4j的Java驱动:https://neo4 ...
- 499div2-E Border :裴蜀定理
这个定理就像类似学扩展欧几里得判断是否有解的条件,当时是ax+by = c:仅当c = k*gcd(a,b)时有解,其实也就是只要是公约数的倍数就行. 而裴蜀定理是多个未知量x1*a1+x2*a2+. ...
- 使用Vue脚手架
关于不同版本的Vue: vue.js与vue.runtime.xxx.js的区别: (1) vue.js是完整版的Vue,包含: 核心功能+模板解析器 (2) vue.runtime.xxx.js是运 ...
- find和filter有什么区别
JavaScript 在 ES6 上有很多数组方法,每种方法都有独特的用途和好处. 在开发应用程序时,大多使用数组方法来获取特定的值列表并获取单个或多个匹配项. 在列出这两种方法的区别之前,我们先来一 ...
- Scanner进阶用法
Scanner进阶用法 判断是否为整数,浮点数 package charpter2; import java.util.Scanner; public class Scanner3 { public ...
- 案例: 利用 Hugging Face 进行复杂文本分类
Witty 与 Hugging Face 专家加速计划的成功案例 如果你对如何更快构建 ML 解决方案感兴趣,请访问 专家加速计划 登陆页面并通过 填写表单 联系我们! 业务背景 随着 IT 技术不断 ...
- 面试题锦集:1、数据库三大范式,2、mysql索引类型及作用,3、事务的特性和隔离级别
目录 面试题集锦 一.数据库三大范式 二.mysql有哪些索引类型及作用 三.事务的特性和隔离级别 1.事务的四大特性 2.事务的隔离级别 3.什么是脏读.不可重复度.幻读 4.解决办法 面试题集锦 ...