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...