亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用自定義錯誤碼攔截grpc內部狀態(tài)碼問題

 更新時間:2023年09月18日 10:45:19   作者:love666666shen  
這篇文章主要介紹了使用自定義錯誤碼攔截grpc內部狀態(tài)碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

使用自定義錯誤碼攔截grpc內部狀態(tài)碼

在golang項目中,通過grpc開發(fā)時,對于非法傳入的參數、解析失敗、返回異常時,雖然使用的是自定義的狀態(tài)碼,如果不做特殊處理,grpc默認會使用其內部的狀態(tài)碼進行攔截。

如果想要使用自定義的錯誤碼,應該如何處理呢?

這里提供一種方式可以自由使用自定義的狀態(tài)碼,雖然不能從全局攔截grpc狀態(tài)碼,但也能夠做到簡潔方便地處理自定義狀態(tài)碼,具體只需在返回error之前,通過status.Errorf()傳入自定義錯誤碼和錯誤信息描述即可。

import (
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
)
err = status.Errorf(codes.Code(resp.ErrNum),  errcode.GetCodeDesc(int(resp.ErrNum)))

其中,resp表示返回結構,ErrNum表示錯誤碼,GetCodeDesc函數通過錯誤碼返回對應的錯誤信息描述。

status.Errorf函數定義如下:

// A Code is an unsigned 32-bit error code as defined in the gRPC spec.
type Code uint32
// Errorf returns Error(c, fmt.Sprintf(format, a...)).
func Errorf(c codes.Code, format string, a ...interface{}) error {
	return Error(c, fmt.Sprintf(format, a...))
}

grpc成功和異常狀態(tài)碼

所在包:

package io.grpc;

所在類:

Status?
    public static final Status OK;
    public static final Status CANCELLED;
    public static final Status UNKNOWN;
    public static final Status INVALID_ARGUMENT;
    public static final Status DEADLINE_EXCEEDED;
    public static final Status NOT_FOUND;
    public static final Status ALREADY_EXISTS;
    public static final Status PERMISSION_DENIED;
    public static final Status UNAUTHENTICATED;
    public static final Status RESOURCE_EXHAUSTED;
    public static final Status FAILED_PRECONDITION;
    public static final Status ABORTED;
    public static final Status OUT_OF_RANGE;
    public static final Status UNIMPLEMENTED;
    public static final Status INTERNAL;
    public static final Status UNAVAILABLE;
    public static final Status DATA_LOSS;
  • Ok:返回成功
  • Canceled:操作已取消
  • Unknown:未知錯誤。如果從另一個地址空間接收到的狀態(tài)值屬 于在該地址空間中未知的錯誤空間,則可以返回此錯誤的示例。 沒有返回足夠的錯誤信息的API引發(fā)的錯誤也可能會轉換為此錯誤
  • InvalidArgument:表示客戶端指定了無效的參數。 請注意,這與FailedPrecondition不同。 它表示無論系統(tǒng)狀態(tài)如何(例如格式錯誤的文件名)都有問題的參數
  • DeadlineExceeded:意味著操作在完成之前過期。 對于更改系統(tǒng)狀態(tài)的操作,即使操作成功完成,也可能會返回此錯誤。 例如,服務器的成功響應可能會延遲足夠的時間以使截止日期到期
  • NotFound:表示找不到某個請求的實體(例如文件或目錄)
  • AlreadyExists:表示嘗試創(chuàng)建實體失敗,因為已經存在
  • PermissionDenied:表示調用者沒有執(zhí)行指定操作的權限。它不能用于因耗盡某些資源而引起的拒絕(使用ResourceExhausted代替這些錯誤)。如果調用者無法識別,則不能使用它(使用Unauthenticated代替這些錯誤)
  • ResourceExhausted:表示某些資源已耗盡,可能是每個用戶的配額,或者整個文件系統(tǒng)空間不足
  • FailedPrecondition:表示操作被拒絕,因為系統(tǒng)不處于操作執(zhí)行所需的狀態(tài)。
  • Aborted:表示操作被中止,通常是由于并發(fā)問題(如序列器檢查失敗,事務異常終止等)造成的。請參閱上面的試金石測試以確定FailedPrecondition,Aborted和Unavailable之間的差異
  • OutOfRange:表示操作嘗試超過有效范圍。
  • Unimplemented:該方法未實現
  • Internal: 意味著底層系統(tǒng)預期的一些不變量已被打破。 如果你看到其中的一個錯誤,那么事情就會非常糟糕
  • Unavailable:內部Grpc服務不可用,請求不到
  • DataLoss:指示不可恢復的數據丟失或損壞
  • Unauthenticated:表示請求沒有有效的操作認證憑證

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Go語言中的switch用法實例分析

    Go語言中的switch用法實例分析

    這篇文章主要介紹了Go語言中的switch用法,實例分析了switch的功能及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go語言并發(fā)模型的2種編程方案

    Go語言并發(fā)模型的2種編程方案

    這篇文章主要介紹了Go語言并發(fā)模型的2種編程方案,本文給出共享內存和通過通信的2種解決方案,并給出了實現代碼,需要的朋友可以參考下
    2014-10-10
  • xorm根據數據庫生成go model文件的操作

    xorm根據數據庫生成go model文件的操作

    這篇文章主要介紹了xorm根據數據庫生成go model文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang?gorm模型結構體的定義示例

    golang?gorm模型結構體的定義示例

    這篇文章主要為大家介紹了golang?gorm模型結構體的定義示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Golang基礎教程之字符串string實例詳解

    Golang基礎教程之字符串string實例詳解

    這篇文章主要給大家介紹了關于Golang基礎教程之字符串string的相關資料,需要的朋友可以參考下
    2022-07-07
  • 解析Go?中的?rune?類型

    解析Go?中的?rune?類型

    rune類型是?Go?語言的一種特殊數字類型,Go?語言通過rune處理中文,支持國際化多語言,本文給大家介紹Go?中的?rune?類型,感興趣的朋友一起看看吧
    2022-03-03
  • Golang小數操作指南之判斷小數點位數與四舍五入

    Golang小數操作指南之判斷小數點位數與四舍五入

    這篇文章主要給大家介紹了關于Golang小數操作指南之判斷小數點位數與四舍五入的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-03-03
  • go語言中[]*int和*[]int的具體使用

    go語言中[]*int和*[]int的具體使用

    本文主要介紹了go語言中[]*int和*[]int的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • go語言題解LeetCode1299將每個元素替換為右側最大元素

    go語言題解LeetCode1299將每個元素替換為右側最大元素

    這篇文章主要為大家介紹了go語言LeetCode刷題1299將每個元素替換為右側最大元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 在ubuntu下構建go語言開發(fā)環(huán)境的方法

    在ubuntu下構建go語言開發(fā)環(huán)境的方法

    這篇文章主要介紹了在ubuntu下構建go語言開發(fā)環(huán)境的方法,需要的朋友可以參考下
    2014-10-10

最新評論