protocol buffers指南------package

包定义

可以在.proto文件中增加一个可选的包标识来防止protocol消息类型之间的名字冲突。

package foo.bar;
message Open { ... }

在定义消息类型的字段时可以这样使用包标识

message Foo {
  ...
  foo.bar.Open open = 1;
  ...
}

使用不同的语言,包标识的生成的代码有所差异:

  • 在c++中,生成的类包装在c++ namespace中,如上示例,Open将在namespace foo::bar中。
  • 在java和Kotlin中,包被作为java package使用,除非在.proto文件中显式指定java_package选项。
  • 在Python中,这个包指令将被忽略,因为Python模块是根据他们在文件系统中的位置决定的。
  • 在Go中, 包被作为Go package使用, 除非在.proto文件中显式指定go_package选项.
  • 在Ruby中, 生成的代码被包裹在内嵌的Ruby namespaces, 转换为要求的Ruby capitalization风格(第一个字符大写;如 果第一个字符不是字母则加一个PB_前缀)。
  • 在 C# 中,包在转换为 PascalCase 后用作命名空间,除非在文件中显式指定命名空间。

包和命名解析

在protocol buffer语言中, 类型命名解析类似 C++: 首先搜索最内层的范围, 然后最内层的外一层, 以此类推, 每个包都被认为是它父包的"内层". 在最前面的'.'(例如, .foo.bar.Baz)意味着替换为从最外层范围开始.
protocol buffer编译器通过解析导入的.proto文件来解析所有的类型命名. 每个语言的代码生成器知道在这个语言中如何引用每个类型, 即使它有不同的范围规则。

包的导入

在文章 protocol buffers指南------其他类型 - (jianshu.com) 中介绍了包导入的方法,和正常编程语言的导入类似,注意文件位置即可。

注:内容翻译自官网文档 Language Guide (proto3) 中的 Packages 一节

你可能感兴趣的:(protocol buffers指南------package)