golang gRPC:根据.protobuf文件生成go代码

这篇具有很好参考价值的文章主要介绍了golang gRPC:根据.protobuf文件生成go代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

golang gRPC:根据.protobuf文件生成go代码

根据.protobuf文件生成go代码

安装 protoc 编译器。如果没有安装,可以参考官方文档进行安装。

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0

使用 protoc 命令生成 gRPC 代码:

protoc --go_out=. --go-grpc_out=. your_proto_file.proto

此命令将生成 .pb.go 和 _grpc.pb.go 文件,其中包含 protobuf 和 gRPC 的代码实现.

  • –go_out选项会生成纯粹的Protocol Buffer消息代码,这包括Go语言的消息结构体和一些辅助方法。如果你只需要使用Protocol Buffer消息,而不需要gRPC的功能,那么使用–go_out就足够了。

  • 使用–go-grpc_out选项可以生成完整的gRPC服务端和客户端代码,包括Stub代码、服务接口的实现等。

在网上,你还能看到,如下写法:

$ protoc --go_out=plugins=grpc:. *.proto

–go_out=plugins=grpc和–go-grpc_out选项的效果是类似的,都可以生成gRPC相关的代码。但是它们之间还是有一些不同的。

在最新版本的Protocol Buffer编译器中,–go-grpc_out选项已经取代了–go_out=plugins=grpc选项,并且成为了生成gRPC服务端和客户端代码的推荐选项。

根据proto生成go放在什么位置是最佳实践

根据最佳实践,一般情况下,Proto文件应该放在单独的目录中。同时,生成的Go代码应该放在一个单独的目录中这个目录与Proto文件所在的目录可以是同级目录或不同级目录

具体来说,你可以将Protobuf文件放置在一个名为 proto/ 的目录下,然后再创建一个名为 generated/ 的目录来存放由 Protobuf 生成的 Go 代码。例如:

project/
├── proto/
│   └── example.proto
└── generated/
    └── example.pb.go

这样做有以下几个好处:

  1. 可以更好地组织项目结构,使得每个组件、模块都有自己的独立位置。
  2. 可以方便地对生成的代码进行管理和维护。
  3. 可以避免在 Git 等版本控制系统中出现冲突和混乱。

ProtoBuf 生成 Go 代码去掉 JSON tag omitempty

PB 默认生成 的 Go struct 会带上 JSON tag omitempty,有时我们希望缺省值为零值的字段也能够出现在 JSON 串,我们需要将 struct 中的 JSON tag omitempty 去掉,那么该如何将其去掉呢?

本节直接参考原文链接:https://blog.csdn.net/K346K346/article/details/125077738

工作常见报错总结

报错:–go_out: protoc-gen-go: plugins are not supported; use ‘protoc --go-grpc_out=…’ to generate gRPC

这个错误通常是由于缺少gRPC插件造成的。在使用 --go_out 标志时,它只会生成普通的 protocol buffer 代码,而不是 gRPC 代码。要生成 gRPC 代码,您需要同时使用 --go-grpc_out 标志,并确保已安装正确的 gRPC Go 插件。

请按照以下步骤解决此问题:

确认您已正确安装了 gRPC Go 插件。

要安装 gRPC Go 插件,请执行以下命令:

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1

使用 --go-grpc_out 标志(而不是 --go_out 标志)来生成代码。

protoc --proto_path=. --go_out=. --go-grpc_out=. path/to/your/proto/file.proto

您还可以将 --go_out 标志用作较早版本的 fallback 选项,以防某些情况下存在插件无法正常工作的问题。

protoc --proto_path=. --go_out=. --go-grpc_out=. --go_opt=paths=source_relative path/to/your/proto/file.proto

如果您仍然遇到问题,请尝试更新 gRPC Go 并重新安装插件。

报错:undefined: grpc.SupportPackageIsVersion7

问题描述:
运行报错:undefined: grpc.SupportPackageIsVersion7

问题分析:
在gRPC 1.36 版本中,grpc.SupportPackageIsVersion7已被弃用。这个常量最初是为了支持旧版本的Go语言而添加的,现在已经废弃掉了。

解决方法:
如果您遇到了undefined: grpc.SupportPackageIsVersion7错误,请考虑升级您的代码以使用新的gRPC API。一般来说,不建议在新的gRPC应用程序中使用这个常量。

rpc.SupportPackageIsVersion7常量是由gRPC Go生成的客户端代码使用的。

从gRPC Go 1.36开始,这个常量已经被弃用,应该使用新的API来代替它。为了解决这个问题,请执行以下步骤:

确认您正在使用最新版本的gRPC Go。可以使用以下命令升级到最新版本:go get -u google.golang.org/grpc

检查gRPC Go和protoc-gen-go版本是否一致,查看go.mod中的版本信息。文章来源地址https://www.toymoban.com/news/detail-629550.html

到了这里,关于golang gRPC:根据.protobuf文件生成go代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • rpc、gRPC快速入门,python调用,protobuf协议

    远程过程调用协议RPC (Remote Procedure Call Protocol) RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据 举例:在 a服务内

    2024年02月13日
    浏览(44)
  • 【gRPC】go语言实现gRPC(示例实践演示)

    目录 1、获取gRPC和Protobuf依赖 2、安装protobuf编译器 3、安装两个插件  4、编译proto文件 5、服务端 6、客户端 7、结果展示 goLand配置 Release Protocol Buffers v21.6 · protocolbuffers/protobuf · GitHub Protocol Buffers - Google\\\'s data interchange format - Release Protocol Buffers v21.6 · protocolbuffers/protobuf https:

    2023年04月09日
    浏览(33)
  • golang grpc配置使用实战教程

    RPC是远程过程调用(Remote Procedure Call)的缩写形式, RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。通俗地讲, 使用RPC进行通信,调用远程函数就像调用本地函数一样,RPC底层会做好数据的序列化与传输。

    2024年02月03日
    浏览(31)
  • Buf 教程 - 使用 Protobuf 生成 Golang 代码和 Typescript 类型定义

    Buf 是一款更高效、开发者友好的 Protobuf API 管理工具,不仅支持代码生成,还支持插件和 Protobuf 格式化。 我们可以使用 Buf 替代原本基于 Protoc 的代码生成流程,一方面可以统一管理团队 Protoc 插件的版本、代码生成配置,另一方面可以简化项目开发配置。 本文将会用两部分

    2024年02月08日
    浏览(67)
  • [golang 微服务] 6. GRPC微服务集群+Consul集群+grpc-consul-resolver案例演示

    上一节讲解了consul集群: [golang 微服务] 5. 微服务服务发现介绍,安装以及consul的使用,Consul集群,这样的话,当一台server挂掉之后,集群就会从另一台server中获取服务,这就保证了客户端访问consul集群的负载均衡性. 这里还有一个问题: 就是当终端的对应的 微服务挂掉 了,consul集群se

    2024年02月09日
    浏览(31)
  • golang工程——grpc-gateway 转发http header中自定义字段到grpc上下文元数据

    http header 转发到 grpc上下文 grpc网关可以将请求体内容转发到grpc对应消息中。那如何获取http header头中的信息,本文将介绍如何将http header转发到grpc上下文并采用拦截器,获取http header中的内容。 有些http header中的内置字段是会转发的比如Authorization,但是狠多自定义字段是转发

    2024年02月08日
    浏览(26)
  • golang 通用的 grpc http 基础开发框架

    golang 通用的 grpc http 基础开发框架 仓库地址: https://github.com/webws/go-moda 仓库一直在更新,欢迎大家吐槽和指点 transport: 集成 http(echo、gin)和 grpc。 tracing: openTelemetry 实现微务链路追踪 pprof: 分析性能 config: 通用的配置文件读取模块,支持 toml、yaml 和 json 格式。 logger: 日志系统

    2024年02月10日
    浏览(27)
  • 复杂gRPC之go调用go

    我们使用了一个较为复杂的proto文件,这个文件的功能主要是用来定位的,详细内容可以看代码中的注解 相比之前的文件来说,这个方法中定义了四种类型的方法。 ● 简单的RPC接口   ○ 客户端使用存根发送请求到服务器并等待响应返回,就像平常的函数调用一样。 ● 一个

    2024年02月05日
    浏览(31)
  • go grpc高级用法

    gRPC 一般不在 message 中定义错误。毕竟每个 gRPC 服务本身就带一个 error 的返回值,这是用来传输错误的专用通道。gRPC 中所有的错误返回都应该是 nil 或者 由 status.Status 产生的一个error。这样error可以直接被调用方Client识别。 常规用法 当遇到一个go错误的时候,直接返回是无法

    2024年02月22日
    浏览(29)
  • go语言 grpc 拦截器

    gRPC拦截器(interceptor)是一种函数,它可以在gRPC调用之前和之后执行一些逻辑,例如认证、授权、日志记录、监控和统计等。拦截器函数是gRPC中非常重要的概念,它允许我们在服务端和客户端添加自定义逻辑,以满足业务需求和运维需求。 在gRPC中,拦截器函数通常通过实现

    2024年02月04日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包