go精通protobuf连载二:理解protobuf中protoc与protoc-gen-go的关系

一、protobuf 介绍

Protobuf全称是Google Protocol Buffer,是一种高效轻便的结构化数据存储方式,如同xml,json常用来序列化数据,用来存储以及传输。
相当于json和xml,Protobuf占用的宽带更小,序列化更快。目前在grpc等服务中,越来越流行。

二、protoc

protoc是 protocol compiler,是protocol 编译器。
当我们从 https://github.com/protocolbu...官网安装protobuf后,在命令行,就会有一个 protoc shell脚本命令。
目前 protoc 编译器支持的语言有以下几种。
image.png
我们使用protoc 命令行可以把.proto 文件转译成各种编程语言对应的源码,包含数据类型定义、调用接口等。

protoc 命令把.proto文件转成go的过程有两步

  1. 解析.proto文件,转译成protobuf的原生数据结构在内存中保存;
  2. 把protobuf相关的数据结构传递给相应语言的编译插件,由插件负责根据接收到的protobuf原生结构渲染输出特定语言的模板。(对应go的protoc-gen-go)

三、protoc-gen-go

在官方文档里,
https://pkg.go.dev/github.com...里说明到
protoc-gen-go 是 Google protobuf编译器生成 Go 代码的插件。
安装成功后再 GOPATH里可以调用

protoc-gen-go

protoc里面”go“后缀是调用这个插件,比如生产.pb.go代码

protoc --go_out=paths=source_relative:. path/to/file.proto

其中"--go_out="表示生成Go文件,protoc会自动寻找GOPATH(默认为系统GOPATH路径)中的protoc-gen-go执行文件。
执行这个命令会生成.pb.go文件,文件地址如下:

path/to/file.pb.go

你可能感兴趣的:(goprotobuf)