最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

這里提供一種方式可以自由使用自定義的狀態(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表示返回結(jié)構(gòu),ErrNum表示錯誤碼,GetCodeDesc函數(shù)通過錯誤碼返回對應(yīng)的錯誤信息描述。

status.Errorf函數(shù)定義如下:

// 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ā)的錯誤也可能會轉(zhuǎn)換為此錯誤
  • InvalidArgument:表示客戶端指定了無效的參數(shù)。 請注意,這與FailedPrecondition不同。 它表示無論系統(tǒng)狀態(tài)如何(例如格式錯誤的文件名)都有問題的參數(shù)
  • DeadlineExceeded:意味著操作在完成之前過期。 對于更改系統(tǒng)狀態(tài)的操作,即使操作成功完成,也可能會返回此錯誤。 例如,服務(wù)器的成功響應(yīng)可能會延遲足夠的時間以使截止日期到期
  • NotFound:表示找不到某個請求的實體(例如文件或目錄)
  • AlreadyExists:表示嘗試創(chuàng)建實體失敗,因為已經(jīng)存在
  • PermissionDenied:表示調(diào)用者沒有執(zhí)行指定操作的權(quán)限。它不能用于因耗盡某些資源而引起的拒絕(使用ResourceExhausted代替這些錯誤)。如果調(diào)用者無法識別,則不能使用它(使用Unauthenticated代替這些錯誤)
  • ResourceExhausted:表示某些資源已耗盡,可能是每個用戶的配額,或者整個文件系統(tǒng)空間不足
  • FailedPrecondition:表示操作被拒絕,因為系統(tǒng)不處于操作執(zhí)行所需的狀態(tài)。
  • Aborted:表示操作被中止,通常是由于并發(fā)問題(如序列器檢查失敗,事務(wù)異常終止等)造成的。請參閱上面的試金石測試以確定FailedPrecondition,Aborted和Unavailable之間的差異
  • OutOfRange:表示操作嘗試超過有效范圍。
  • Unimplemented:該方法未實現(xiàn)
  • Internal: 意味著底層系統(tǒng)預(yù)期的一些不變量已被打破。 如果你看到其中的一個錯誤,那么事情就會非常糟糕
  • Unavailable:內(nèi)部Grpc服務(wù)不可用,請求不到
  • DataLoss:指示不可恢復(fù)的數(shù)據(jù)丟失或損壞
  • Unauthenticated:表示請求沒有有效的操作認證憑證

總結(jié)

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

相關(guān)文章

  • Go使用Pipeline實現(xiàn)一個簡潔而高效的數(shù)據(jù)處理流水線

    Go使用Pipeline實現(xiàn)一個簡潔而高效的數(shù)據(jù)處理流水線

    在并發(fā)編程中,流水線Pipeline是一種常見的設(shè)計模式,它將一個復(fù)雜任務(wù)拆解為多個獨立步驟,由多個協(xié)程并行處理并通過通道傳遞數(shù)據(jù),Go語言天生支持這種模型,能顯著提高數(shù)據(jù)處理的性能和可讀性,本文將給大家介紹如何使用Go實現(xiàn)一個簡潔而高效的數(shù)據(jù)處理流水線
    2025-08-08
  • golang1.21新特性全面講解

    golang1.21新特性全面講解

    經(jīng)過了半年左右的開發(fā),golang?1.21?最近正式發(fā)布了,這個版本中有不少重要的新特性和變更,尤其是在泛型相關(guān)的代碼上,下面小編就來和大家好好嘮嘮吧
    2023-08-08
  • Golang使用原生http實現(xiàn)中間件的代碼詳解

    Golang使用原生http實現(xiàn)中間件的代碼詳解

    中間件(middleware):常被用來做認證校驗、審計等,家常用的Iris、Gin等web框架,都包含了中間件邏輯,但有時我們引入該框架顯得較為繁重,本文將介紹通過golang原生http來實現(xiàn)中間件操作,需要的朋友可以參考下
    2024-05-05
  • 簡單四步快速集成go環(huán)境變量

    簡單四步快速集成go環(huán)境變量

    這篇文章主要為大家介紹了快速集成go環(huán)境變量的簡單四個步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Go語言數(shù)據(jù)結(jié)構(gòu)之二叉樹必會知識點總結(jié)

    Go語言數(shù)據(jù)結(jié)構(gòu)之二叉樹必會知識點總結(jié)

    如果你是一個開發(fā)人員,或多或少對樹型結(jié)構(gòu)都有一定的認識。二叉樹作為樹的一種,是一種重要的數(shù)據(jù)結(jié)構(gòu),也是面試官經(jīng)常考的東西。本文為大家總結(jié)了一些二叉樹必會知識點,需要的可以參考一下
    2022-08-08
  • Go語言遞歸函數(shù)的具體實現(xiàn)

    Go語言遞歸函數(shù)的具體實現(xiàn)

    本文主要介紹了Go語言遞歸函數(shù)的具體實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 詳解Go語言中切片的長度與容量的區(qū)別

    詳解Go語言中切片的長度與容量的區(qū)別

    切片可以看成是數(shù)組的引用,切片的長度是它所包含的元素個數(shù)。切片的容量是從它的第一個元素到其底層數(shù)組元素末尾的個數(shù)。本文將通過示例詳細講講Go語言中切片的長度與容量的區(qū)別,需要的可以參考一下
    2022-11-11
  • Go依賴注入DI工具wire使用詳解(golang常用庫包)

    Go依賴注入DI工具wire使用詳解(golang常用庫包)

    依賴注入是指程序運行過程中,如果需要調(diào)用另一個對象協(xié)助時,無須在代碼中創(chuàng)建被調(diào)用者,而是依賴于外部的注入,本文結(jié)合示例代碼給大家介紹Go依賴注入DI工具wire使用,感興趣的朋友一起看看吧
    2022-04-04
  • 解決vscode中g(shù)olang插件依賴安裝失敗問題

    解決vscode中g(shù)olang插件依賴安裝失敗問題

    這篇文章主要介紹了解決vscode中g(shù)olang插件依賴安裝失敗問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Go語言提升開發(fā)效率的語法糖技巧分享

    Go語言提升開發(fā)效率的語法糖技巧分享

    每門語言都有自己的語法糖,像java的語法糖就有方法變長參數(shù)、拆箱與裝箱、枚舉、for-each等等,Go語言也不例外。本文就來介紹一些Go語言的語法糖,需要的可以參考一下
    2022-07-07

最新評論

民县| 珲春市| 禄丰县| 安多县| 荆州市| 托克托县| 石景山区| 怀集县| 盖州市| 额尔古纳市| 巴马| 平顺县| 施秉县| 孟州市| 正阳县| 志丹县| 西藏| 登封市| 长乐市| 屯昌县| 甘泉县| 梅州市| 措美县| 和顺县| 文登市| 改则县| 民和| 姚安县| 开阳县| 四川省| 茂名市| 那坡县| 浏阳市| 井陉县| 芦山县| 泽州县| 肥东县| 商城县| 太保市| 藁城市| 银川市|