protoc-gen-go的使用和问题

news2024/10/3 4:38:14

最近 在网上查看关于proto文件编译为golang代码的文章,发现遇到的问题好多都是文件目录不对,参数不对的情况,这里主要解决,使用 不同版本的proto-gen-go 参数不一样和找不到文件问题

安装protoc-gen-go

google.golang.org仓库版本
  • 此版本需要再安装个protoc-gen-go-grpc,对标--go-grpc_out 参数
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

//编译文件写法
protoc -I=$SRC_DIR   --go_out=$DST_DIR --go-grpc_out=$DST_DIR $SRC_DIR/*.proto
github.com/golang/protobuf仓库版本
go install github.com/golang/protobuf/protoc-gen-go@latest
//编译文件
protoc --go_out=plugins=grpc:$DST_DIR -I=$SRC_DIR $SRC_DIR/*.proto

两版都可以使用

解析参数

  1. -I 等于 --proto_path ,表示要编译的proto文件的路径和import引入的文件路径
  2. --go_out 表示编译的golang文件所在目录 *.pb.go
  3. --go-grpc_out 表示编译golang的rpc服务代码文件所在目录,文件后缀为*_grpc.pb.go
  4. --go_out=plugins=grpc:$DST_DIR 表示生成的golang代码文件里包含grpc服务代码,文件后缀为 *.pb.go

常见错误解决

  • *.proto 文件找不到,主要原因是 -I 指定的目录 和 import 引入的文件路径何在一起为文件真实目录
    在这里插入图片描述
    项目目录: /grpc_study/
    go_package参数:表示编译后文件的所在的位置,和$DST_DIR关联着
    mathv3.proto目录: /grpc_study/proto/
    mathv2.proto目录: /grpc_study/proto/
    annotations.proto目录:grpc_study/third_party/google/api/
    执行 编译时所在目录: /grpc_study/
    编译命令:
protoc \
	-I "third_party/" \
	-I "proto" \
	--grpc-gateway_out=logtostderr=true:. \
	--go_out=plugins=grpc:. \
	./proto/mathv3.proto

实例完整代码 grpc_study

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

互联网新时代要来了(二)什么是AIGC?

什么是AIGC? 最近,又火了一个词“**AIGC”**2022年被称为是AIGC元年。那么我们敬请期待,AIGC为我们迎接人工智能的下一个时代。 TIPS:内容来自百度百科、知乎、腾讯、《AIGC白皮书》等网页 什么是AIGC?1.什么是AIGC?…

Vue3篇.01-简介及基本使用,项目创建方式, 模板语法, 事件监听, 修饰符

一.简介1.概念Vue 是一款用于构建用户界面的 JS框架, 基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型, 高效地开发用户界面。渐进式框架, 适应不同需求进行开发。两个核心功能:声明式…

在云原生的趋势下,不掌握Go语言可能不太行

云原生技术已经是不可逆的趋势 云原生技术使组织能够在公共云、私有云和混合云等现代动态环境中构建和运行可扩展的应用程序,其中容器、服务网格、微服务、不可变基础设施和声明式 API 等都是云原生的重要技术内容。 这些新技术的出现使松散耦合的系统具有弹性、可管理和可观…

FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持

目录1、前言2、任意分辨率视频输出理论基础3、VDMA实现数据缓存4、工程1:Kintex7使用VDMA5、工程2:Zynq7100使用VDMA6、上板调试验证并演示7、福利:工程代码的获取1、前言 之前写过一篇FPGA纯verilog实现任意分辨率视频输出显示,…

hume项目k8s的改造

hume项目k8s的改造 一、修改构建目录结构 1、在根目录下添加build-work文件夹 目录结构如下 [rootk8s-worker-01 build-work]# tree . . ├── Dockerfile ├── hume │ └── start.sh └── Jenkinsfile2、每个文件内容如下 Dockerfile FROM ccr.ccs.tencentyun…

数据结构与算法基础(王卓)(10):案例分析与实现(多项式;稀疏多项式;图书管理系统(略);)

题干: 用线性表和链表的方式,分别实现(稀疏)多项式的 定义(构造框架)创建加减乘(多项式)线性表的创建: (略,相较于其他操作难度不,以…

亚马逊真人测评好还是自养号测评好 深度剖析讲解

关于真人测评和自养号哪个好,一直都是老生常谈的问题了。实际操作下来到底哪一个更好呢?今天陈哥给大家详细分析一下。 先说自养号。所谓的自养号,说白了就是通过搭建国外的真实买家环境,然后购买资料自己注册的账号。 很多工作…

Java300集,学完即可就业

学习java首先我们要明白Java是什么?Java是一门面向对象的编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&a…

K8s 架构简介(一)

一、前言 在开始学习K8s之前,让我们对容器有一个基本的了解 1.1 什么是容器 一个容器镜像是一个可运行的软件包,其中包含了一个完整的可执行程序,包括代码和运行时需要应用、系统库和全部重要设置的默认值。 通过将应用程序本身&#xff…

虹科新闻|虹科与Telco Systems正式建立合作伙伴关系

近日,虹科与美国Telco Systems达成战略合作,虹科正式成为Telco Systems在中国区域的认证授权代理商。未来,虹科将携手Telco Systems,共同为新一代边缘计算和企业网络提供创新通信软件产品。虹科及Telco Systems双方都对彼此的合作…

C语言(逻辑运算符和条件运算符)

目录 一.逻辑运算符 1.原理 2.等级排序 3.求值顺序 二.条件运算符:? 一.逻辑运算符 1.原理 && 与(条件都为真,才为真) || 或(一个条件为真,才为真) ! 非(条件为假&…

【R语言(二):Nomogram(诺莫图/列线图)绘制 / R语言逻辑回归分析】

R语言(二):Nomogram(诺莫图/列线图)绘制 1、基本概念 Nomogram,中文常称为诺莫图或者列线图。简单的说是将Logistic回归或Cox回归的结果进行可视化呈现。它根据所有自变量回归系数的大小来制定评分标准,给每个自变量的每个取值水平一个评分&…

怎样的目标管理能真正实现目标?做到这3点就对了

目标应该是每个人人生中接触最多的一样东西了,大到分分钟几百万上下的项目目标,小到一次考试。目标能不能完成,关键还是看目标管理有没有做好,做到下面这三点,不论是在职场中管团队,还是在生活中管个人&…

十四、平衡二叉树

1、看一个案例(说明二叉排序树可能的问题) 给你一个数列{1,2,3,4,5,6},要求创建一棵二叉排序树(BST),并分析问题所在。 上面二叉排序树存在问题分析: 左子树全部为空,从形式上看&…

tr命令笔记

tr 是Unix命令行专家工具箱中的一件万能工具。它可用于编写优雅的单行命令。 tr 可以对 来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。 tr 是translate(转换)的简写, 因为它可以将一组字符转换成另一组字符。 tr 只能…

Windows 11 + WSL(ubuntu 20.04) + CLion(2022.3) 编译OpenJDK12

编译OpenJDK12 目录编译OpenJDK12前言一、下载OpenJDK源码二、编译OpenJDK参考https://openjdk.org/groups/build/doc/building.html1:安装编译所需的组件2:执行编译命令3:验证编译结果三、在Clion中调试OpenJDK源码1:Clion中配置…

R语言GD包地理探测器分析时报错、得不到结果等情况的解决方案

本文介绍在利用R语言的GD包,实现自变量最优离散化方法选取与执行、地理探测器(Geodetector)操作时,出现各类报错信息、长时间得不到结果等情况的解决方案。 在之前的文章R语言GD包基于栅格图像实现地理探测器与连续参数的自动离散…

深度解读Webpack中的loader原理

一、前言 webpack 是一个现代 JavaScript 应用的静态模块打包器。那么 webpack 是怎样实现不同种类资源模块加载的呢? 没错就是通过 loader。loader 用于对模块的源代码进行转换。loader 可以使你在 import 或加载模块时预处理文件。 我们带着下面几个问题&#…

css中的盒子模型

1、盒子模型:CSS中规定盒子分别由:内容区域(content)、内边距区域(padding)、边框区域(border)、外边距区域(margin)构成。 2、盒模型分为IE盒模型和W3C标准…

内存泄漏检测组件 -- hook

目录 hook malloc与free出现的问题 builtin_return_address(N) C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 hook malloc与free出现的问题 #define _GNU_SOURCE #include <stdio.h> #include <dlfcn.h> #include <stdlib.h> /****…