精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go應(yīng)用中優(yōu)雅處理Error的幾個(gè)技巧

開發(fā) 前端
Go語言很強(qiáng)大并且現(xiàn)在也十分流行 — 許多項(xiàng)目都是用Go語言來實(shí)現(xiàn)的,如Kubernetes。

 

Go語言很強(qiáng)大并且現(xiàn)在也十分流行 — 許多項(xiàng)目都是用Go語言來實(shí)現(xiàn)的,如Kubernetes。Go語言的一個(gè)有趣特性是它的多值返回功能提供了一種與其他編程語言不同的錯(cuò)誤處理方法。Go將error視為具有預(yù)定義類型的值,其本身是一個(gè)interface類型。然而,編寫大型應(yīng)用時(shí)需要有包含更多上下文信息的error才有價(jià)值,而不僅僅是一個(gè)值。本文我們將探討如何封裝Go的error類型以在應(yīng)用程序中帶來更大的價(jià)值。

用戶自定義類型

我們將重寫的Go里自帶的 error 類型,首先從一個(gè)自定義的錯(cuò)誤類型開始,該錯(cuò)誤類型將在程序中識(shí)別為 error 類型。因此,我們引入一個(gè)封裝了Go的 error 的新自定義Error類型。

  1. type GoError struct { 
  2.    error 

上下文數(shù)據(jù)

當(dāng)我們?cè)贕o中說error是一個(gè)值時(shí),它是字符串值 - 任何實(shí)現(xiàn)了 Error() string 函數(shù)的類型都可以視作error類型。將字符串值視為error會(huì)使跨層的error處理復(fù)雜化,因此處理error字符串信息并不是正確的方法。所以我們可以把字符串和錯(cuò)誤碼解耦:

  1. type GoError struct { 
  2.    error 
  3.    Code    string 

現(xiàn)在對(duì)error的處理將基于錯(cuò)誤碼 Code 字段而不是字符串。讓我們通過上下文數(shù)據(jù)進(jìn)一步對(duì)錯(cuò)誤字符串進(jìn)行解耦,在上下文數(shù)據(jù)中可以使用 i18n 包進(jìn)行國際化。

  1. type GoError struct { 
  2.    error 
  3.    Code    string 
  4.    Data    map[string]interface{} 

Data 包含用于構(gòu)造錯(cuò)誤字符串的上下文數(shù)據(jù)。錯(cuò)誤字符串可以通過數(shù)據(jù)模板化:

  1. //i18N def 
  2. "InvalidParamValue""Invalid parameter value '{{.actual}}', expected '{{.expected}}' for '{{.name}}'" 

在i18N定義文件中,錯(cuò)誤碼 Code 將會(huì)映射到使用 Data 構(gòu)建的模板化的錯(cuò)誤字符串中。

原因(Causes)

error可能發(fā)生在任何一層,有必要為每一層提供處理error的選項(xiàng),并在不丟失原始error值的情況下進(jìn)一步使用附加的上下文信息對(duì)error進(jìn)行包裝。 GoError 結(jié)構(gòu)體可以用 Causes 進(jìn)一步封裝,用來保存整個(gè)錯(cuò)誤堆棧。

  1. type GoError struct { 
  2.    error 
  3.    Code    string 
  4.    Data    map[string]interface{} 
  5.    Causes  []error 

如果必須保存多個(gè)error數(shù)據(jù),則 causes 是一個(gè)數(shù)組類型,并將其設(shè)置為基本 error 類型,以便在程序中包含該原因的第三方錯(cuò)誤。

組件(Component)

標(biāo)記層組件將有助于識(shí)別error發(fā)生在哪一層,并且可以避免不必要的error wrap。例如,如果 service 類型的error組件發(fā)生在服務(wù)層,則可能不需要wrap error。檢查組件信息將有助于防止暴露給用戶不應(yīng)該通知的error,比如數(shù)據(jù)庫error:

  1. type GoError struct { 
  2.    error 
  3.    Code      string 
  4.    Data      map[string]interface{} 
  5.    Causes    []error 
  6.    Component ErrComponent 
  7.  
  8. type ErrComponent string 
  9. const ( 
  10.    ErrService  ErrComponent = "service" 
  11.    ErrRepo     ErrComponent = "repository" 
  12.    ErrLib      ErrComponent = "library" 

響應(yīng)類型(ResponseType)

添加一個(gè)錯(cuò)誤響應(yīng)類型這樣可以支持error分類,以便于了解什么錯(cuò)誤類型。例如,可以根據(jù)響應(yīng)類型(如 NotFound )對(duì)error進(jìn)行分類,像 DbRecordNotFound 、 ResourceNotFound 、 UserNotFound 等等的error都可以歸類為 NotFound error。這在多層應(yīng)用程序開發(fā)過程中非常有用,而且是可選的封裝:

  1. type GoError struct { 
  2.    error 
  3.    Code         string 
  4.    Data         map[string]interface{} 
  5.    Causes       []error 
  6.    Component    ErrComponent 
  7.    ResponseType ResponseErrType 
  8.  
  9. type ResponseErrType string 
  10.  
  11. const ( 
  12.    BadRequest    ResponseErrType = "BadRequest" 
  13.    Forbidden     ResponseErrType = "Forbidden" 
  14.    NotFound      ResponseErrType = "NotFound" 
  15.    AlreadyExists ResponseErrType = "AlreadyExists" 

重試

在少數(shù)情況下,出現(xiàn)error會(huì)進(jìn)行重試。retry字段可以通過設(shè)置 Retryable 標(biāo)記來決定是否要進(jìn)行error重試:

  1. type GoError struct { 
  2.    error 
  3.    Code         string 
  4.    Message      string 
  5.    Data         map[string]interface{} 
  6.    Causes       []error 
  7.    Component    ErrComponent 
  8.    ResponseType ResponseErrType 
  9.    Retryable    bool 

GoError 接口

通過定義一個(gè)帶有 GoError 實(shí)現(xiàn)的顯式error接口,可以簡化error檢查:、

  1. package goerr 
  2.  
  3. type Error interface { 
  4.    error 
  5.  
  6.    Code() string 
  7.    Message() string 
  8.    Cause() error 
  9.    Causes() []error 
  10.    Data() map[string]interface{} 
  11.    String() string 
  12.    ResponseErrType() ResponseErrType 
  13.    SetResponseType(r ResponseErrType) Error 
  14.    Component() ErrComponent 
  15.    SetComponent(c ErrComponent) Error 
  16.    Retryable() bool 
  17.    SetRetryable() Error 

抽象error

有了上述的封裝方式,更重要的是對(duì)error進(jìn)行抽象,將這些封裝保存在同一地方,并提供error函數(shù)的可重用性

  1. func ResourceNotFound(id, kind string, cause error) GoError { 
  2.    data := map[string]interface{}{"kind": kind, "id": id} 
  3.    return GoError{ 
  4.       Code:         "ResourceNotFound"
  5.       Data:         data, 
  6.       Causes:       []error{cause}, 
  7.       Component:    ErrService, 
  8.       ResponseType: NotFound, 
  9.       Retryable:    false
  10.    } 

這個(gè)error函數(shù)抽象了 ResourceNotFound 這個(gè)error,開發(fā)者可以使用這個(gè)函數(shù)來返回error對(duì)象而不是每次創(chuàng)建一個(gè)新的對(duì)象:

  1. //UserService 
  2. user, err := u.repo.FindUser(ctx, userId) 
  3. if err != nil { 
  4.    if err.ResponseType == NotFound { 
  5.       return ResourceNotFound(userUid, "User", err) 
  6.    } 
  7.    return err 

結(jié)論

我們演示了如何使用添加上下文數(shù)據(jù)的自定義Go的error類型,從而使得error在多層應(yīng)用程序中更有意義。你可以在 這個(gè)GitHub Gist [1]看到完整的代碼實(shí)現(xiàn)和定義。

責(zé)任編輯:張燕妮 來源: 網(wǎng)管叨bi叨
相關(guān)推薦

2022-09-07 00:04:37

JavaScript運(yùn)算符技巧

2021-07-12 15:35:56

JavaScript代碼運(yùn)算符

2009-06-25 14:05:40

Java應(yīng)用技巧

2022-07-18 08:08:16

Go?語言技巧

2021-05-07 06:27:29

JavaScript運(yùn)算符開發(fā)

2022-04-06 07:32:41

Java運(yùn)算符變量

2021-07-05 07:55:11

Goroutine錯(cuò)誤語言

2024-05-06 12:30:51

Go語言中間件

2024-10-16 12:23:55

技巧Spring驗(yàn)證

2023-11-06 08:01:09

Go同步異步

2025-03-31 00:29:44

2025-05-22 09:01:28

2022-07-19 08:01:55

函數(shù)Go格式化

2024-02-19 08:07:31

Go版本語言

2009-01-05 09:14:17

.NETcatch性能損失

2025-02-05 08:43:40

2019-03-11 09:18:20

Java 8Stream數(shù)據(jù)結(jié)構(gòu)

2013-06-03 10:02:53

WAF繞過

2014-07-22 09:01:53

SwiftJSON

2022-06-09 10:42:47

GoJSON
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

一区二区传媒有限公司| 岛国视频一区| 性生交大片免费全黄| 一区视频网站| 91黄色小视频| 裸体裸乳免费看| 亚洲av成人无码久久精品老人| 天堂av在线一区| 久久99久久久久久久噜噜| 99久久国产精| 久久久91麻豆精品国产一区| 欧美性猛交xxxx乱大交3| 国产91av视频在线观看| 国产综合在线视频| 又色又爽又黄18网站| 日韩精品一区二区三区| 亚洲精选免费视频| 日韩电影免费观看高清完整| 成人午夜免费在线观看| 蜜桃av一区二区三区电影| 久久久久久网址| 91无套直看片红桃在线观看| 五月国产精品| 日韩亚洲欧美在线| 亚洲欧美视频二区| 亚洲一二三四| 亚洲18女电影在线观看| 中文字幕av日韩精品| 九色在线视频| 成人动漫一区二区三区| 92福利视频午夜1000合集在线观看| 视频一区二区三区四区五区| 一区三区视频| 欧美夫妻性视频| 人人干在线观看| 精品国产一区二区三区四区| 日韩经典第一页| 亚洲精品成人无码毛片| www.久久99| 欧美男女性生活在线直播观看| 国产福利一区视频| 都市激情亚洲一区| 疯狂蹂躏欧美一区二区精品| 91黄色在线看| 国产又色又爽又黄刺激在线视频| 中文字幕一区二区三区四区| 亚洲欧洲精品一区二区三区波多野1战4 | 日韩激情免费视频| 国产高清在线a视频大全| 亚洲精品高清在线| 9色视频在线观看| gogogogo高清视频在线| 精品视频在线一区| 国产a视频精品免费观看| 亚洲aa中文字幕| 国产伦精品一区二区三区视频痴汉 | 欧美激情精品久久久久久| 中文字幕av免费在线观看| 中文字幕一区二区精品区| 免费91在线视频| 麻豆疯狂做受xxxx高潮视频| 欧美日韩网站| 97国产精品视频人人做人人爱| 国产精品自拍视频一区| 一本色道久久综合| 国产成人精品av在线| 欧美特级黄色片| 久久精品999| 91大片在线观看| 日韩不卡视频在线| 青青草伊人久久| 91色精品视频在线| 亚洲精品国偷拍自产在线观看蜜桃| 国产.欧美.日韩| 精品高清视频| www 日韩| 亚洲激情在线播放| 久久综合色视频| 一呦二呦三呦精品国产| 欧美日高清视频| 亚洲精品一二三四| 日韩欧美黄色| 少妇高潮久久久久久潘金莲| 黄色一级片在线| 亚洲综合国产激情另类一区| 国产精品欧美激情在线播放| 精品国产乱码一区二区三| 不卡电影免费在线播放一区| 日韩啊v在线| av免费在线网站| 日韩欧美黄色动漫| 成人免费黄色av| 窝窝社区一区二区| 不卡av电影院| 成人午夜视频在线播放| 精品一区二区三区在线视频| 国产日韩欧美中文| 色哟哟中文字幕| 国产精品久久久久久久久免费丝袜 | 国产精品日本| 国产精品自产拍在线观看| 国产不卡av在线播放| 99精品久久久久久| 伊甸园精品99久久久久久| 91高清视频在线观看| 欧美日韩一级视频| 国产真实乱人偷精品| 日本成人小视频| 91av国产在线| 国产黄色美女视频| 国产亚洲欧美在线| 女人被男人躁得好爽免费视频| 欧美中文字幕精在线不卡| 日韩欧美亚洲国产另类 | 欧美精品一二| 久久久久一本一区二区青青蜜月| 中文字幕免费在线看| 91亚洲大成网污www| 激情久久av一区av二区av三区| 国产精品videossex国产高清| 亚洲wwww| 亚洲国产精彩中文乱码av在线播放| 人人妻人人澡人人爽| 国产婷婷精品| 国产富婆一区二区三区| 黄色免费网站在线| 欧美日韩国产a| 免费a级黄色片| 亚洲美女黄色| 高清国语自产拍免费一区二区三区| 在线免费av网站| 欧洲另类一二三四区| 91成年人网站| 国产精品色网| 免费在线观看91| 这里有精品可以观看| 亚洲国产欧美一区二区三区同亚洲| 青娱乐免费在线视频| 国内精品伊人久久久久av影院| 日韩精品电影网站| 日韩成人av电影| 亚洲欧美成人网| 无码人妻丰满熟妇区五十路| 久久蜜桃av一区精品变态类天堂| 久草热视频在线观看| 欧美午夜寂寞| 91av在线看| 欧美性孕妇孕交| 日本二三区不卡| 丁香激情五月少妇| 美腿丝袜亚洲一区| 国产又大又长又粗又黄| 日韩伦理一区二区| 美女视频黄免费的亚洲男人天堂| 99视频国产精品免费观看a| 亚洲三级电影网站| 久久精品无码一区二区三区毛片| 欧美91福利在线观看| 亚洲一区二区在线播放| 免费在线观看的电影网站| 亚洲精品在线免费观看视频| 日韩精品无码一区二区| 91丨porny丨蝌蚪视频| 人妻有码中文字幕| 欧美日韩激情在线一区二区三区| 国产精品丝袜久久久久久高清| 欧洲日本在线| 精品国产一二三区| 天堂在线免费观看视频| 国产精品三级av在线播放| 福利视频999| 亚洲福利电影| 日日噜噜噜噜夜夜爽亚洲精品| 久久婷婷五月综合色丁香| 精品国产一区二区三区久久狼5月| av片免费播放| 精品久久久久人成| 中国1级黄色片| 懂色av一区二区夜夜嗨| 91视频最新入口| 久久视频在线| 精品日本一区二区| 黄色精品视频网站| 久久久久久久色| 国产高清在线看| 日韩精品一区二区在线观看| 成年人看的毛片| 国产黄色一级大片| 亚洲高清三级视频| 免费看91的网站| 国产成人免费在线观看不卡| 黄色片视频在线播放| 91成人网在线观看| 欧美国产一区二区在线| 精品国产一区二区三区2021| 欧美在线视频网站| av在线app| 亚洲午夜未删减在线观看| 国产高清视频免费观看| 91久久香蕉国产日韩欧美9色| 色婷婷在线视频观看| 久久久噜噜噜久久中文字幕色伊伊| 污污网站在线观看视频| 久久99伊人| 超碰人人爱人人| 久久一区二区三区电影| 好看的日韩精品视频在线| 亚洲欧美在线综合| 国产精品久久久久久一区二区| free性欧美| 欧美精品生活片| 69久久久久| 精品亚洲国产成av人片传媒 | 精品一二三四区| 人妻内射一区二区在线视频 | 亚洲欧美高清视频| 欧美精品一二三| 日韩国产成人在线| 精品人伦一区二区三区蜜桃网站| 男人操女人的视频网站| 欧美韩日一区二区三区| 欧美特黄一区二区三区| www.在线欧美| 亚洲啪av永久无码精品放毛片| 国产一区二区三区在线看麻豆| 日本在线观看免费视频| 日日欢夜夜爽一区| 丁香花在线影院观看在线播放| 欧美激情91| 一级性生活视频| 自拍偷拍欧美| 青青视频免费在线| 欧美人与禽猛交乱配视频| 欧美 日韩 国产 在线观看| 日韩一区电影| 综合视频在线观看| 欧美oldwomenvideos| 亚洲永久激情精品| 97精品一区二区| av磁力番号网| 欧美黄色精品| 免费看毛片的网址| 亚洲免费观看| 国产一区二区在线视频播放| 日韩午夜av| 播放灌醉水嫩大学生国内精品| 国产精品久久久久久久久久妞妞| 你懂的av在线| 久久成人精品| 国产精品无码专区av在线播放| 久久亚洲风情| 污色网站在线观看| 激情亚洲综合在线| 欧美国产在线一区| 成人免费的视频| 国产精品一级黄片| 久久久91精品国产一区二区精品 | 五月综合激情网| 五月天激情国产综合婷婷婷| 色噜噜偷拍精品综合在线| jizz国产在线| 欧美一二区视频| 秋霞欧美在线观看| 亚洲免费电影一区| 在线看免费av| 久久99青青精品免费观看| 波多野结衣中文在线| 日本久久久久久| 欧美aaa级| 99在线观看视频网站| 人人香蕉久久| 亚洲日本无吗高清不卡| 欧美日韩国产一区精品一区| 18禁免费观看网站| 日韩成人一区二区| 久久精品无码一区二区三区毛片| 不卡的看片网站| 在线观看免费小视频| 一区二区三区日韩精品视频| 亚洲免费黄色网址| 777亚洲妇女| 五月天婷婷在线观看| 日韩有码在线播放| 国产乱码午夜在线视频| 国产精品视频免费在线观看| 伊色综合久久之综合久久| 欧美三级电影在线播放| 欧美 亚欧 日韩视频在线| jizzjizzxxxx| 国产精品123| 国产女主播喷水高潮网红在线| 成人免费在线播放视频| 欧美黑人一区二区| 欧美v国产在线一区二区三区| 欧美日韩国产中文字幕在线| 久久国产精品网站| 三上悠亚一区二区| 成人h视频在线观看| 日韩精品免费一区二区在线观看| av高清在线免费观看| 久久99久久99小草精品免视看| 国产艳俗歌舞表演hd| 亚洲精品第1页| 特级西西444www大胆免费看| 亚洲电影在线看| 黄色网在线免费看| 国产精品com| 菁菁伊人国产精品| 男同互操gay射视频在线看| 久久久人人人| 一边摸一边做爽的视频17国产| 亚洲视频一二三| 波多野结衣视频在线看| 亚洲国内精品视频| 香蕉久久aⅴ一区二区三区| 国产精品视频免费在线| 色综合综合网| 男人亚洲天堂网| www.一区二区| 久久久久久免费观看| 7777女厕盗摄久久久| 成人在线免费电影| 国产99久久精品一区二区 夜夜躁日日躁| 日本精品在线观看| 四虎免费在线观看视频| 久久99精品久久久久| 东京热无码av男人的天堂| 色婷婷av一区二区三区之一色屋| 欧美视频xxx| 性色av一区二区三区免费| 综合视频一区| av片在线免费| 成人综合婷婷国产精品久久免费| 精品人妻伦九区久久aaa片| 在线成人av网站| 毛片在线播放a| 91久久在线视频| 午夜精品999| 极品人妻一区二区| 一区二区三区91| 亚洲乱熟女一区二区| 欧美激情一区二区三级高清视频| 日韩中文字幕在线一区| 97碰在线视频| 成人av网站在线观看| 日韩精品在线不卡| 日韩精品在线视频美女| 黑人巨大精品| 日日噜噜噜噜夜夜爽亚洲精品| 免费成人在线观看| 开心激情五月网| 日韩三级精品电影久久久| 在线观看操人| 国内精品**久久毛片app| 亚洲影音先锋| 一级特黄曰皮片视频| 欧美日韩在线一区二区| 精品自拍一区| 成人18视频| 蘑菇福利视频一区播放| 蜜臀久久99精品久久久久久| 欧美日韩亚洲综合在线| www在线视频| 久久国产精品免费一区| 日韩精品乱码av一区二区| 欧美88888| 日韩精品一区二区三区在线观看 | 91网在线播放| 97中文在线| 香蕉国产精品偷在线观看不卡| 一级片视频免费看| 制服丝袜日韩国产| 91超碰免费在线| 日韩精品一区二区三区外面| 欧美女同在线观看| 欧美日韩在线二区| 15—17女人毛片| 亚洲精品中文在线| 午夜黄色小视频| 国产精品国模在线| 欧美区日韩区| 先锋影音av在线| 日韩视频在线一区二区| 在线黄色的网站| 丰满女人性猛交| 26uuu精品一区二区在线观看| 中文字字幕在线中文乱码| 欧美极品少妇xxxxⅹ裸体艺术| 神马电影久久| 91精品国产高清91久久久久久| 欧美性少妇18aaaa视频| www久久日com| 欧美日本韩国国产| 国产精品一卡二卡| 999视频在线| 久久久午夜视频| 欧美hentaied在线观看| 国产精品毛片一区二区| 日韩视频在线一区二区| 久久91超碰青草在哪里看|