我正在使用 golang 開發(fā) grpc 服務(wù),我觀察到如果出現(xiàn) rpc 錯誤,我會得到response = nil err = some error即使我返回一個非零響應(yīng)和錯誤。但是我也在我的 pb.go 文件中看到:err := c.cc.Invoke(ctx, "/proto.MyService/Hello", in, out, opts...) if err != nil { return nil, err } return out, nil如果 err 不是 nil ,他們會做出回應(yīng) nil,我想這就是我得到這樣回應(yīng)的原因。我認為在出現(xiàn)錯誤時獲得響應(yīng)是沒有意義的,但是,有沒有辦法可以從 grpc 獲得非零響應(yīng)和錯誤?
2 回答

有只小跳蛙
TA貢獻1824條經(jīng)驗 獲得超8個贊
原因很簡單。gRPC 是 RPC(遠程過程調(diào)用)概念的特定實現(xiàn),其中調(diào)用另一個進程,就好像它是您系統(tǒng)的一部分。gRPC 可以交叉編譯到其他語言,包括一次不支持多個返回值的語言(例如 C++、Java)。生成的客戶端將拋出異常,而不是返回錯誤。因此,除了錯誤之外,您返回的任何響應(yīng)都將被忽略,從而降低您的實現(xiàn)的可移植性。
雖然 go 支持兩者,但我們不希望 RPC 根據(jù)實現(xiàn)客戶端的特定語言產(chǎn)生不同的結(jié)果。pb.go
文件還應(yīng)該做什么,除了:如果發(fā)生錯誤,所有信息都應(yīng)該在錯誤,如果沒有,應(yīng)該返回響應(yīng)?
豐富您返回的錯誤,如果您仍然發(fā)現(xiàn)自己需要兩者。

HUH函數(shù)
TA貢獻1836條經(jīng)驗 獲得超4個贊
正如官方文檔中解釋的那樣,標準的 gRPC 錯誤是一個代碼和一個附加的錯誤字符串。
如果您需要獲得某種響應(yīng),請使用豐富的錯誤模型來包含響應(yīng)。有關(guān)gRPC 中豐富錯誤處理的示例檢查模式
- 2 回答
- 0 關(guān)注
- 274 瀏覽
添加回答
舉報
0/150
提交
取消