Protocol Buffers 學習(6):檔案 | 欄位選項介紹

大大怪發表於2017-06-06

.proto檔案中的單獨宣告可以使用多個選項進行註釋。 選項不會更改宣告的整體含義,但可能會影響其在特定上下文中的處理方式。 可用選項的完整列表在google/protobuf/descriptor.proto中定義。也就是說不同的選項可能只在編譯某種語言時才會生效

一些選項是檔案級選項,這意味著它們應該寫在頂級作用域中,而不是在任何訊息,列舉或服務定義內。 一些選項是訊息級選項,這意味著它們應該寫入訊息定義內。 一些選項是欄位級選項,這意味著它們應該寫在欄位定義中。 列舉型別,列舉值,服務型別和服務方式也可以選擇選項。 然而,目前沒有任何有用的選項

以下是一些最常用的選項:

檔案選項

  • java_package:這個選項可以在編譯成java類程式碼是設定類名
option java_package = "com.example.foo";複製程式碼
  • java_multiple_files:Causes top-level messages, enums, and services to be defined at the package level, rather than inside an outer class named after the .proto file.(有合適的理解請評論留言~)
option java_multiple_files = true;複製程式碼
  • java_outer_classname : 要生成的最外層Java類的類名(因此是檔名)。 如果在.proto檔案中沒有指定明確的java_outer_classname,則通過將.proto檔名轉換為camel-case來構造類名稱(因此foo_bar.proto變為FooBar.java)。 如果不生成Java程式碼,則此選項不起作用。
option java_outer_classname = "Ponycopter";複製程式碼
  • optimize_for:可以設定為SPEED,CODE_SIZE或LITE_RUNTIME。 這將影響C ++和Java程式碼生成器(以及可能的第三方生成器),方法如下:

    • SPEED (default): 高效的方式編譯
    • CODE_SIZE:生成的程式碼類最少,生成的總程式碼量也小,但是操作速度會變慢
    • LITE_RUNTIME:編譯器將會使用一個輕量的庫,但是也會少一些功能,一般用在受限的平臺上(比如:手機)。編譯器仍將像SPEED模式一樣生成所有方法的快速實現。 生成的類只會在每個語言中實現MessageLite介面,該介面僅提供完整Message介面的方法的一部分。
option optimize_for = CODE_SIZE;複製程式碼
  • cc_enable_arenas:生成c++程式碼時開啟arena alloction
  • objc_class_prefix:設定生成的Objective-C程式碼的字首

欄位選項

  • deprecated:標記以後,表示該欄位已經棄用,不應該在新程式碼中使用,未來可能要替換掉
int32 old_field = 6 [deprecated=true];複製程式碼

相關文章