Go-kit 自定义异常错误处理

Go-kit 自定义异常错误处理,第1张

前言

在go的默认错误实现中,任何异常错误都会返回500,实际项目中我们需要根据异常的不同去设置code的不同

一、自定义Error处理器
package ErrorHandler

import (
	"context"
	"net/http"
)

type MyError struct{
	Code    int
	Message string
}

func NewMyError(code int, msg string) error {
	return &MyError{Code: code, Message: msg}
}

func (this *MyError) Error() string {
	return this.Message
}
func MyErrorEncoder(ctx context.Context, err error, w http.ResponseWriter) {
	contentType, body := "text/plain; charset=utf-8", []byte(err.Error())
	//设置请求头
	w.Header().Set("Content-type", contentType)
	// 通过类型断言判断当前error的类型,走相应的处理
	if myerr, ok := err.(*MyError); ok {
		w.WriteHeader(myerr.Code)
		w.Write(body)
	} else {
		// 如果不是自定义错误处理
		w.WriteHeader(500)
		w.Write(body)
	}
}

整合Go-kit

基于go-kit的ServerOption传入

opts := []httpTransport.ServerOption{
		httpTransport.ServerErrorEncoder(ErrorHandler.MyErrorEncoder),
		httpTransport.ServerBefore(httpTransport.PopulateRequestContext),
	}
示例返回

如果出现异常,例如限流器出现的toot many request异常,想要返回自定义的429,就可以用自定义的异常错误处理。

return nil, utils.NewMyError(429, "toot many request") 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/995103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存