GRPC的HTTP返回值int64被轉(zhuǎn)為string類型

問題描述

最近在使用http接口訪問一個GRPC的服務(wù)時遇到一個數(shù)據(jù)類型轉(zhuǎn)換的問題猜嘱。一個時間戳字段在PB中定義的字段類型為uint64,返回到本地之后卻是一個string類型蕴侧,在我用uint64去接收這個字段時報了錯。

原因分析

為什么GRPC要把int64轉(zhuǎn)為string類型呢两入,他們的回答是遵循proto3的序列化規(guī)則,proto3的json-mapping中規(guī)定了int64/uint64/fixed64類型映射的json類型為string敲才。如圖:(PB文檔地址:https://developers.google.com/protocol-buffers/docs/proto3#json

pb-josnMapping.jpg

很多人都質(zhì)疑PB的這個行為裹纳,然而這并不能改變什么,下面是一個關(guān)于該問題的回答紧武,大意就是:JS使用了52bit去實現(xiàn)IEEE754的雙精度數(shù)剃氧,也就是說js在不丟失信息的情況下最大能表示的數(shù)是 2^52 。64位的數(shù)在JS中直接使用是會有問題了阻星。PB為了客戶端能正常處理數(shù)據(jù)而把64位數(shù)值直接轉(zhuǎn)換為了string類型朋鞍。


int64tostring-reasopn.jpg
問題解決

本人使用的是golang語言,在處理http返回值時妥箕,使用jsonpb包代替了json包去解析返回的二進制數(shù)據(jù)滥酥。不過解析出來的是message格式的,用的時候還需要進一步加工處理畦幢,相比較與轉(zhuǎn)換string類型到int64坎吻,感覺還是簡單一點。

resp, err := http.Post(addr+path, "application/json", buf)
if err != nil { 
    t.Error(err)
 } else {
    if resp.Body != nil {
        var result stat.ListDataRows_Response
        err = jsonpb.Unmarshal(resp.Body, &result)
        if err != nil {
            t.Error(err)
        } else {
            t.Logf("result:%+v", result)
        }
    } else {
        t.Log("result is nil")   
    }
}

返回值:
 result:{
     Rows:[
       timestamp:1571195630000 
       tags:<key:"rule_id" value:"518852" > 
       values:<key:"logs" value:"*******" >
    ] 
    NextPageToken:1571195630000
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宇葱,一起剝皮案震驚了整個濱河市瘦真,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌黍瞧,老刑警劉巖诸尽,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異印颤,居然都是意外死亡您机,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門膀哲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來往产,“玉大人,你說我怎么就攤上這事某宪》麓澹” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵兴喂,是天一觀的道長蔼囊。 經(jīng)常有香客問我焚志,道長,這世上最難降的妖魔是什么畏鼓? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任酱酬,我火速辦了婚禮,結(jié)果婚禮上云矫,老公的妹妹穿的比我還像新娘膳沽。我一直安慰自己,他們只是感情好让禀,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布挑社。 她就那樣靜靜地躺著,像睡著了一般巡揍。 火紅的嫁衣襯著肌膚如雪痛阻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天腮敌,我揣著相機與錄音阱当,去河邊找鬼。 笑死糜工,一個胖子當著我的面吹牛弊添,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啤斗,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼表箭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钮莲?” 一聲冷哼從身側(cè)響起免钻,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崔拥,沒想到半個月后极舔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡链瓦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年拆魏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慈俯。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡渤刃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贴膘,到底是詐尸還是另有隱情卖子,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布刑峡,位于F島的核電站洋闽,受9級特大地震影響玄柠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诫舅,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一羽利、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刊懈,春花似錦这弧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泽疆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玲献,已是汗流浹背殉疼。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捌年,地道東北人瓢娜。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像礼预,于是被迫代替她去往敵國和親眠砾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • gRPC 是一個高性能托酸、通用的開源RPC框架褒颈,基于HTTP/2協(xié)議標準和Protobuf序列化協(xié)議開發(fā),支持眾多的...
    小波同學閱讀 19,494評論 6 19
  • 原文出處:gRPC gRPC分享 概述 gRPC 一開始由 google 開發(fā)励堡,是一款語言中立谷丸、平臺中立、開源的遠...
    小波同學閱讀 7,222評論 0 18
  • 1)簡介 gRPC負載平衡的主要實現(xiàn)機制是外部負載平衡应结,即通過外部負載平衡器來向客戶端提供更新后的服務(wù)器列表刨疼。 g...
    Jay_Guo閱讀 13,277評論 6 22
  • 現(xiàn)如今微服務(wù)很流行,而微服務(wù)很有可能是使用不同語言進行構(gòu)建的鹅龄。而微服務(wù)之間通常需要相互通信揩慕,所以微服務(wù)之間必須在以...
    solenovex閱讀 492評論 0 2
  • 【舊知】對Angie的認知停留在“開掛的互聯(lián)網(wǎng)斜杠達人”,只是簡單的認為她是抓住了知識付費IP紅利的牛人之一扮休。 【...
    逗媽麥西閱讀 250評論 3 0