我們希望將一個(gè)具有一個(gè)屬性的對象/結(jié)構(gòu)作為 golang 中的空列表/數(shù)組/切片返回給客戶端(瀏覽器)。從 go 代碼中,我們返回 len=0 和capacity=0 的空切片,但是通過 protobuf 這個(gè)鍵被刪除或設(shè)置為 nil 并被刪除。原始緩沖區(qū)代碼syntax = "proto3";package version1;message ToDo {? ? ?int64 id = 1 ;? ? ?string title = 2;}message ReadAllResponse{? ? ?repeated? ?ToDo? toDos = 1 ;}戈蘭代碼:list := make([]*version1.ToDo, 0) //[]*version1.ToDo{}output:= version1.ReadAllResponse{? ? ? ? ToDos: list,? ? ? ? Api:? ?"v1",? ? }我得到的實(shí)際輸出是, {api: "v1"}但預(yù)期應(yīng)該是{api: "v1",todos:[]}請幫助/建議我們修復(fù) protobuf 或 golang 語法。
1 回答

一只斗牛犬
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
當(dāng)grpc-gateway使用 jsonpb 序列化器將 proto 結(jié)構(gòu)序列化為 json時(shí),您的數(shù)組字段會(huì)丟失。
幸運(yùn)的是,網(wǎng)關(guān)公開了一種在設(shè)置網(wǎng)關(guān)時(shí)配置 jsonpb 序列化器的方法:
mux?:=?runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard,?&runtime.JSONPb{?EmitDefaults:true}))
該?&runtime.JSONPb{ EmitDefaults:true}
選項(xiàng)應(yīng)該執(zhí)行您想要的操作。
- 1 回答
- 0 關(guān)注
- 300 瀏覽
添加回答
舉報(bào)
0/150
提交
取消