当前位置: 首页 > news >正文

Protocol Buffers Go Generated Code Guide

Protocol Buffers Go 代码生成指南

本主题准确描述了协议缓冲区编译器为任何给定的协议定义生成的Go代码。

编译器调用

协议缓冲区编译器需要一个插件来生成Go 代码。使用Go 1.16或更高版本安装,方法是运行:

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

这将在 G O B I N 中按照一个 p r o t o c g e n g o 的二进制文件。设置 GOBIN 中按照一个protoc gen go 的二进制文件。设置 GOBIN中按照一个protocgengo的二进制文件。设置GOBIN环境变量以更改安装位置。它必须在$PATH中,协议缓冲区编译器才能找到它。
当使用Go_out 标志调用时,协议缓冲区编译器会产生Go输出。go_out标志的参数是希望编译器编写go输出的目录。编译器为每个.proto 文件输入创建一个源文件。输出文件的名称是通过将.proto扩展名替换为.pb.go来创建的。
生成的.pb.go 文件在输出目录中的位置取决于编译器标志。有几种输出模式:

如果指定了paths=import标志,则输出文件将放置在以Go包的导入路径命名的目录中。例如,Go导入路径为example.com/project/protos/fizz的输入文件protos/buzz.proto会在example.com/project-protos/fizz/pzz.pb.Go中生成一个输出文件。如果未指定路径标志,这是默认的输出模式。

生成的.pb.go文件在输出目录中的位置取决于编译器标志。有几种输出模式:

如果指定了paths=import标志,则输出文件将放置在以Go包的导入路径命名的目录中。例如,Go导入路径为example.com/project/protos/fizz的输入文件protos/buzz.proto会在example.com/project-protos/fizz/pzz.pb.Go中生成一个输出文件。如果未指定路径标志,这是默认的输出模式。

如果指定了module=$PREFIX标志,则输出文件将被放置在以Go 包的导入路径命名的目录中,但指定的目录前缀将从输出文件名中删除。例如,输入文件protos/buzz.proto的Go导入路径为example.com/project/protos/fizz,并将example.com/fizz/pzz.pb.Go处生成输出文件。在模块路径之外生成任何Go包都会导致错位,此模式对于将生成的文件直接输出到Go模块非常有用。

如果指定了path=source_relative标志,则输出文件将与输入文件放置在相同的相对目录中。例如,一个输入文件protos/buzz.proto会在protos/buzz.pb.go中产生一个输出文件。

特定于protoc gen go的标志是通过在调用protoc时传递go_opt标志来提供的。可以传递多个go_opt标志。例如,在运行时:

protoc --proto_path=src --go_out=out --go_opt=paths=source_relative foo.proto bar/baz.proto

编译器将从src目录中读取输入文件foo.proto和bar/baz.proto,并将输出文件foo.pb.go和bar/baza.pb.go写入out目录。如果需要,编译器会自动创建嵌套的输出子目录,但不会创建输出目录本身。

http://www.lryc.cn/news/60913.html

相关文章:

  • Python VTK STL 映射三维模型表面距离
  • C# 异常处理机制和常见的异常类型
  • 【0187】客户端身份验证配置文件视图之pg_hba_file_rules
  • 模糊层次分析法(FAHP)Python实现
  • gdb切换窗口焦点
  • 【Spring Security】 入门实战
  • SpringBoot的Interceptor拦截器的简介和实际使用
  • 5个面向Python高级开发者的技巧
  • Nginx简介
  • 十五分钟带你学会 Electron
  • 设计模式-结构型模式之桥接模式
  • 软件测试工程师为什么要写测试用例?
  • 【DAY40】VUE练习
  • 实模式的寄存器
  • 【UE 控件蓝图】通过键盘选中要点击的按钮 通过Enter键点击
  • SSR在天猫优品大促会场的探索实践
  • WPF教程(一)---创建一个WPF程序基础知识
  • 【C++ 四】函数、指针
  • 虚拟人与娱乐传媒融合,推动综艺新模式
  • Linux_红帽8学习笔记分享_5
  • 网络编程及项目思路
  • GD(兆易创新)系列FLASH进行FPGA和ZYNQ配置固化相操作
  • 通过一个小例子来看一下C语言指针 p、*p、p、*p、*p分别代表什么
  • 【内摹访谈】谈谈AI爆发前夜的B端设计
  • Redis—AOF持久化
  • OpenCV实例(五)指纹识别
  • 第二章 法的内容与形式
  • 外包干了四年,感觉废了..
  • Git如何推送当前代码到远程仓库
  • 第五章 工厂模式