中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

大良營銷網(wǎng)站建設(shè)案例百度的競價排名是哪種方式

大良營銷網(wǎng)站建設(shè)案例,百度的競價排名是哪種方式,沈陽哪家醫(yī)院人流做得最好,十堰為企業(yè)做網(wǎng)站的單位go-zero 錯誤處理(統(tǒng)一響應(yīng)信息) 在實現(xiàn)注冊邏輯時,嘗試重復(fù)注冊可能會返回 400 狀態(tài)碼,顯然不符合正常設(shè)計思維。我們希望狀態(tài)碼為 200,并在響應(yīng)中返回錯誤信息。 一、使用第三方庫 1.下載庫 目前 go-zero官方的…

go-zero 錯誤處理(統(tǒng)一響應(yīng)信息)

在實現(xiàn)注冊邏輯時,嘗試重復(fù)注冊可能會返回 400 狀態(tài)碼,顯然不符合正常設(shè)計思維。我們希望狀態(tài)碼為 200,并在響應(yīng)中返回錯誤信息。
在這里插入圖片描述

一、使用第三方庫

1.下載庫

目前 go-zero官方的 zeromicro 下有一個 x 倉庫,可以實現(xiàn)統(tǒng)一響應(yīng)格式,我們先安裝下:

go get github.com/zeromicro/x

它會自動幫我們把響應(yīng)信息改為下面這種格式:

{"code": 0,"msg": "ok","data": {...}
}

2.修改handler

接著我們修改internal/handler/register/registerhandler.go文件,把原來的響應(yīng)處理,替換成這個庫的:

//導(dǎo)入zeromicro庫并設(shè)置別名,避免和原生的http沖突
import (xhttp "github.com/zeromicro/x/http"  
)//修改RegisterHandler的返回信息
func RegisterHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var req types.RegisterRequestif err := httpx.Parse(r, &req); err != nil {//使用xhttp.JsonBaseResponseCtx 替換掉httpx.ErrorCtxxhttp.JsonBaseResponseCtx(r.Context(), w, err)//httpx.ErrorCtx(r.Context(), w, err)return}l := register.NewRegisterLogic(r.Context(), svcCtx)resp, err := l.Register(&req)if err != nil {//使用xhttp.JsonBaseResponseCtx 替換掉httpx.ErrorCtxxhttp.JsonBaseResponseCtx(r.Context(), w, err)//httpx.ErrorCtx(r.Context(), w, err)} else {//使用xhttp.JsonBaseResponseCtx 替換掉httpx.OkJsonCtxxhttp.JsonBaseResponseCtx(r.Context(), w, resp)//httpx.OkJsonCtx(r.Context(), w, resp)}}
}

3.修改返回錯誤

internal/logic/user/registerlogic.go 文件中,把原來的err 修改成 errors.New() ,它的參數(shù)有兩個,一個是用來返回 code碼 ,還有一個是message消息:

func (l *RegisterLogic) Register(req *types.RegisterRequest) (resp *types.RegisterResponse, err error) {// todo: add your logic here and delete this line/*.....*/if user != nil {//return nil, errreturn nil, errors.New(1, "用戶已注冊")}//插入新的數(shù)據(jù)/*.....*/if err != nil {//return nil, errreturn nil, errors.New(2, "用戶注冊失敗")}}

接著我們運行項目,使用Postman重新測試,結(jié)果如下:
在這里插入圖片描述

二、自定義錯誤管理

如果你不想使用這個庫,或者想自己實現(xiàn)一些自定義錯誤,那么你也可以自己設(shè)置錯誤管理

1.自定義錯誤結(jié)構(gòu)與格式化

我們在internal目錄下新建biz目錄,用于業(yè)務(wù)處理,然后再這個目錄下分別創(chuàng)建3個文件

創(chuàng)建biz.go 文件

package biztype Error struct {Code int    `json:"code"`Msg  string `json:"msg"`
}func NewError(code int, msg string) *Error {return &Error{Code: code,Msg:  msg,}
}func (e *Error) Error() string {return e.Msg
}

創(chuàng)建resp.go 文件

package biztype Result struct {Code int    `json:"code"`Msg  string `json:"msg"`Data any    `json:"data"`
}func Success(data any) *Result {return &Result{Code: Ok,Msg:  "success",Data: data,}
}func Fail(err *Error) *Result {return &Result{Code: err.Code,Msg:  err.Msg,}
}

創(chuàng)建vars.go 文件

package bizconst Ok = 200var (AlreadyRegister = NewError(1, "用戶已注冊")PasswordErr     = NewError(2, "密碼錯誤")InsertErr       = NewError(3, "用戶注冊失敗")
)

2. 使用 httpx.Error 和 httpx.SetErrorHandler

接著修改user.go 文件:

	/*....*/defer server.Stop()//httpx.SetErrorHandler 函數(shù)可以幫助你定義一個全局的錯誤處理邏輯,//該邏輯會在 HTTP handler 中捕獲到的所有錯誤中執(zhí)行。//它將允許你統(tǒng)一處理各類錯誤,返回更加一致和用戶友好的響應(yīng)。//httpx.SetErrorHandler 僅在調(diào)用了 httpx.Error 處理響應(yīng)時才有效。httpx.SetErrorHandler(func(err error) (int, any) {switch e := err.(type) {case *biz.Error:// 自定義一個 錯誤返回類型return http.StatusOK, biz.Fail(e)default:return http.StatusInternalServerError, nil}})ctx := svc.NewServiceContext(c)/*....*/

修改internal/handler/register/registerhandler.go文件:

func RegisterHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var req types.RegisterRequestif err := httpx.Parse(r, &req); err != nil {//httpx.SetErrorHandler 僅在調(diào)用了 httpx.Error 處理響應(yīng)時才有效。//所以我們現(xiàn)在還是使用原來的httpx.ErrorCtxhttpx.ErrorCtx(r.Context(), w, err)return}l := register.NewRegisterLogic(r.Context(), svcCtx)resp, err := l.Register(&req)if err != nil {//httpx.SetErrorHandler 僅在調(diào)用了 httpx.Error 處理響應(yīng)時才有效。//所以我們現(xiàn)在還是使用原來的httpx.ErrorCtxhttpx.ErrorCtx(r.Context(), w, err)} else {//成功的請求,httpx.SetErrorHandler 是捕獲不到的// 所以需要我們自定義返回信息httpx.OkJsonCtx(r.Context(), w, biz.Success(resp))}}
}

3.實現(xiàn)統(tǒng)一的錯誤響應(yīng)機制

接下來,修改 internal/user/register/registerlogic.go文件:

func (l *RegisterLogic) Register(req *types.RegisterRequest) (resp *types.RegisterResponse, err error) {// todo: add your logic here and delete this line/*...*/if user != nil {//return nil, errors.New(1, "用戶已注冊")return nil, biz.AlreadyRegister}//插入新的數(shù)據(jù)/*...*/if err != nil {//return nil, errors.New(2, "用戶注冊失敗")return nil, biz.InsertErr}}

接著運行測試
在這里插入圖片描述

http://www.risenshineclean.com/news/52326.html

相關(guān)文章:

  • 旅游網(wǎng)站怎么用dw做專業(yè)網(wǎng)站優(yōu)化外包
  • 阿里巴巴的網(wǎng)站是自己做的嗎青島seo推廣
  • 建企業(yè)版網(wǎng)站多久白山seo
  • 北京政府網(wǎng)seo推廣話術(shù)
  • 做淘寶網(wǎng)站的企業(yè)網(wǎng)站排名優(yōu)化方案
  • 局域網(wǎng)網(wǎng)站建設(shè)需要什么條件市場推廣和銷售的區(qū)別
  • 山東有哪些網(wǎng)絡(luò)公司優(yōu)化大師客服
  • 開封網(wǎng)站建設(shè)百度商店應(yīng)用市場
  • 青海網(wǎng)站建設(shè)企業(yè)四川seo選哪家
  • 機械做網(wǎng)站好處百度推廣管家登錄
  • 企業(yè)網(wǎng)站需要注意什么搜索引擎營銷是什么意思
  • 網(wǎng)站作用愛站網(wǎng)愛情電影網(wǎng)
  • 合肥網(wǎng)頁制作設(shè)計重慶網(wǎng)站排名優(yōu)化教程
  • 徐州建設(shè)網(wǎng)站公司建網(wǎng)站費用
  • 做公司標志用哪個網(wǎng)站網(wǎng)絡(luò)優(yōu)化需要哪些知識
  • 有口碑的企業(yè)網(wǎng)站建設(shè)專業(yè)的制作網(wǎng)站開發(fā)公司
  • 網(wǎng)站的建設(shè)與維護工資平臺優(yōu)化是什么意思
  • 東莞網(wǎng)站設(shè)計公司軟文標題大全
  • 德爾普網(wǎng)絡(luò)做網(wǎng)站怎么樣淘寶搜索關(guān)鍵詞技巧
  • 電腦首頁wordpress公眾號排名優(yōu)化
  • 手機系統(tǒng)網(wǎng)站seo自動優(yōu)化工具
  • 動態(tài)h5網(wǎng)站開發(fā)百度指數(shù)分析數(shù)據(jù)
  • 凡科快圖軟件下載南昌seo計費管理
  • 網(wǎng)站聯(lián)盟怎么做青島關(guān)鍵詞排名哪家好
  • 泉州seo-泉州網(wǎng)站建設(shè)公司電商平臺的營銷方式
  • 做銷售在那個網(wǎng)站找新鄭網(wǎng)絡(luò)推廣公司
  • 金融網(wǎng)站建設(shè)成功案例品牌關(guān)鍵詞優(yōu)化哪家便宜
  • 用ps做零食網(wǎng)站模板seo培訓(xùn)資料
  • 網(wǎng)站建設(shè)公司名字seo網(wǎng)站優(yōu)化師
  • 做網(wǎng)站什么字體網(wǎng)絡(luò)營銷課程感悟