我有一個(gè)用 proto3 定義的基于 golang 的 GRPC服務(wù)syntax = "proto3";對(duì)于單個(gè) bool 字段的簡(jiǎn)單響應(yīng),如果值為false整個(gè)消息,則將其序列化為空(零長(zhǎng)度)數(shù)據(jù)有效負(fù)載。(正如我懷疑的那樣,將false其視為默認(rèn)值)同時(shí),根據(jù)完全相同的.proto定義構(gòu)建的節(jié)點(diǎn)的 GRPC 客戶端將值解釋為undefined. (雖然true一個(gè)非常一致)調(diào)試服務(wù)器構(gòu)建響應(yīng)的方式data, err := encode(s.getCodec(stream.ContentSubtype()), msg)我注意到,stream.ContentSubtype()返回一個(gè)空字符串,以便在其中s.getCodec回落到. 它導(dǎo)致在這里進(jìn)一步編碼一些東西encoding/proto.Nameprotofunc marshalAppend(buf []byte, m Message, deterministic bool) ([]byte, error) { if m == nil { return nil, ErrNil } mi := MessageV2(m) nbuf, err := protoV2.MarshalOptions{ Deterministic: deterministic, AllowPartial: true, }.MarshalAppend(buf, mi)這看起來(lái)像是真正protoV2的實(shí)施。所以我不知道這里真正正確的問(wèn)題是什么應(yīng)該stream.ContentSubtype()在通信級(jí)別上以某種方式控制以及誰(shuí)負(fù)責(zé)(客戶端/服務(wù)器)在根據(jù)定義生成客戶端/服務(wù)器源代碼時(shí)是否應(yīng)遵循任何其他控制步驟/操作.proto。它不會(huì).proto自我概括元數(shù)據(jù)以輸出一致的來(lái)源嗎?/Cloudproto3真的應(yīng)該通過(guò)protoV2實(shí)施成功編碼嗎?還有什么可能導(dǎo)致這種不一致的價(jià)值觀對(duì)待?
一致的跨平臺(tái) Proto3 序列化/反序列化
慕碼人2483693
2023-01-03 14:20:58