亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 gRPC 狀態包中的 WithDetails() 傳遞自定義原型消息

使用 gRPC 狀態包中的 WithDetails() 傳遞自定義原型消息

Go
一只斗牛犬 2022-06-01 10:39:20
我最近一直在嘗試 gRPC 錯誤處理,并希望將我自己的 proto 消息傳遞給客戶端(定義我自己的錯誤詳細信息和內部錯誤代碼)。在搜索之后,發現了幾個使用 gRPC 狀態包中的 WithDetails() 來附加自定義元數據的示例。我開始實施如下gRPC 原型消息message ErrorInfo {    int64 error_code = 1;    string error_message = 2;    string resource_name = 3;}服務器端實現// Frame the error message        st := status.New(codes.NotFound, "object not found")        errInfo := &api.ErrorInfo {            ErrorCode: 100,            ErrorMessage: "Fetching credential failed",            ResourceName: req.GetBackupLocation().GetCloudCredential(),        }        var err error        st, err = st.WithDetails(errInfo)        if err != nil {            // If this errored, it will always error            // here, so better panic so we can figure            // out why than have this silently passing.            panic(fmt.Sprintf("Unexpected error attaching metadata: %v", err))        }        return  st.Err()客戶端實現fmt.Printf("line 76 err :%v", err)                st := status.Convert(err)                for _, detail := range st.Details() {                    switch t := detail.(type) {                    case *api.ErrorInfo:                        fmt.Printf("error code: %v", t.GetErrorCode())                        fmt.Printf("error msg: %v", t.GetErrorMessage())                        fmt.Printf("resource name: %v", t.GetResourceName())                    }                }當我運行代碼時,它命中了在服務器代碼中添加的 Panic(),這意味著 WithDetails() 出錯了。為了進一步進行,消除了服務器端的恐慌,此客戶端引發以下錯誤:any: message type "" isn't linked inerror問題:WithDetails() 是否僅適用于 googleapis/rpc/errdetails 標準 gRPC 原型定義而不適用于自定義原型?查看 proto 文件和代碼實現,我沒有看到任何特定于 gRPC errdetails 包的內容。當我嘗試使用此包中的 proto 消息時,它工作正常。[注意:我使用的是gogo protobuf]任何人都可以告訴我我在這里缺少什么嗎?
查看完整描述

1 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

我遇到了類似的錯誤(any: message type "" isn't linked in *errors.errorString)。就我而言,這是由于grpc.StatusAPI。

如果您使用的是 gogo proto,則需要導入/使用

"github.com/gogo/status"

代替

"google.golang.org/grpc/status"


查看完整回答
反對 回復 2022-06-01
  • 1 回答
  • 0 關注
  • 266 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號