原文链接:

概要

  • Q&A
  • 多目录多文件编译
  • Goland配置支持proto

Q&A

  1. 如何安装protobuf 以及相应的依赖

protoc 是protobuf提供的命令行工具

brew install protobuf
go install google.golang.org/protobuf/cmd/protoc-gen-go
go get github.com/gogo/protobuf/protoc-gen-gogofaster
gogofast 可以减少指针的使用,减少垃圾回收的时间
Fields without pointers cause less time in the garbage collector. More code generation results in more convenient methods.
  1. grpc和protobuf是什么关系,如何配合使用

protobuf 是协议定义的是结构体,方便不同语言之间的参数转换。

grpc是网络通信框架,可以用json、thrift、protobuf作为结构体

go get -u google.golang.org/grpc
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc

如何编译protobuf后面说。

多目录多文件编译

多目录结构:

有多个微服务,用户中心/文章中心/审核中心 不同的团队服务通过grpc接口提供基础数据访问。这时候都是直接下发protobuf文件来方便传递数据

拆分多个目录,多个包相对来说就比较好维护protobuf文件。万一对方改了多个proto文件,直接丢给我们一个目录。我们也直接将目录覆盖

message 需要关联article的信息。同时还需要关联user包中的author。

到这需要先弄明白protobuf是如何import其他文件的。

  1. protobuf支持相同目录下的文件直接import

artitle和message是在同一个包下面的,可以直接import即可。

  1. 如果是多个目录,需要指定相对的根路径

--proto_path 指定根路径

推荐直接以项目路径作为根路径的:

此时的import就都是绝对路径,这是就不能即有相对路径,又有绝对路径了,否则会报错:

多目录,多文件如何编译

推荐设置根目录,以绝对路径import文件。protoc编译如何写?

但对对某个目录下的proto文件进行编译:

编译后:

Goland配置支持protobuf

需要安装插件: Protocol Buffers Editor

配置:Preferences > Languages & Frameworks >Protocol Buffers

取消: Configure automatically

添加:根目录所在目录