美文网首页
protocol buffers指南------package

protocol buffers指南------package

作者: Sirius_lwq | 来源:发表于2022-08-06 14:00 被阅读0次

    包定义

    可以在.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

          本文链接:https://www.haomeiwen.com/subject/hqmbwrtx.html