protobuf中的列舉預設值應該為UNKNOWN

2021-07-16 18:00:50 字數 524 閱讀 8031

protobuf中的列舉預設值應該為unknown

(金慶的專欄)

proto3中的列舉值為了與proto2相容,要求預設值固定為第1個,值為0。

proto2中並沒有規定對範圍之外的列舉值的處理,

而proto3中已規定無定義的列舉值反序列化後再次序列化保持原值。

lua pbc 中對無定義的列舉值做了忽略處理,效果等同於變成預設值。

希望未來版本能符合proto3的規定。

協議定義中新增新的列舉值是常有的,客戶端伺服器協議版本不同時,

就會出現無定義的列舉值。

如果預設值為unknown, 則所有新增或已刪除列舉值都按預設值處理就不會出錯。

缺點是要求所有列舉值都要顯式賦值,不能使用預設值了。

例如,原來定義為

enum loginresult

多數情況下,僅需預設ok就行了。

但是伺服器再新增乙個 err_not_ready, 客戶端因為使用舊版協議,

遇見err_not_ready最終返回預設值 ok.

預設值清洗

預設值是資料中最常見的乙個問題,處理預設值有很多方式,主要包括以下四個步驟進行預設值處理 確定預設值範圍 去除不需要的字段 填充預設值內容 重新獲取資料 注意 最重要的是預設值內容填充。在進行確定預設值範圍的時候,對每個欄位都計算其缺失比例,然後按照缺失比例和字段重要性分別指定不同的策略 重要性高,...

MySQL中的預設值處理

在mysql中可以使用default為字段設定乙個預設值,如果在插入資料是並未指定該列的值,那麼mysql會將預設值新增到該列中。建立表時指定列的預設值 例 建立 e 表,該錶包含 emp id 主鍵且自動增長,包含 name,包含 address該列預設值為 unknown 包含job id該列預...

CSS中width height的預設值

對於初學者來說,css中的width height的預設值是很神奇的,因為經常看到如下這樣的 明明只給乙個 father標籤 紅色的div 設定了乙個width,為啥它在瀏覽器中顯示出來是有乙個固定的height的呢。於是就去w3c上搜尋,發現height的預設值都是auto,也就是說上一行 中的h...