error接口、错误类型过滤

参考:

Golang中的error类型: https://studygolang.com/articles/4389

文档:https://studygolang.com/pkgdoc

 

 类的方法实现了接口的全部方法,就说此类实现了接口,并可以把此类赋值给这个接口

// The error built-in interface type is the conventional interface for
// representing an error condition, with the nil value representing no error.
type error interface {   error类型本身就是一个预定义好的接口,里面定义了一个method
	Error() string
}

---------------

type Error struct {
	Code model.ErrorType `json:"code"`
	Msg  string          `json:"msg"`
}

func (e Error) Error() string {   实现上面的Error接口方法
	bytes, _ := json.Marshal(e)
	return string(bytes)
}

---------------

func (s *articleStore) ArticleInfoGet(sn int64) (*model.ArticleInfo, error) {   error
	//从缓存获取
	if articleMeta, err := ArticleRedis.ArticleInfoGet(sn); err == nil {
		return articleMeta, nil
	}
	//从Mysql获取
	articleInfo, err := ArticleMysql.GetArticleInfo(sn, true)
	if err != nil || articleInfo == nil {
		return nil, commonErrors.ErrNotFound()   返回Error类型~~~对比上面的额error
	}
	if articleInfo.DeletedAt == nil {
		//文章写入缓存
		if err := ArticleRedis.ArticleInfoSave(articleInfo); err != nil {
			//日志
			logrus.Errorf("save article meta to redis err, article %+v, err %v", articleInfo, err)
		}
	}
	return articleInfo, nil
}

---------------

// 请求资源未找到
func ErrNotFound() Error {
	return Error{   Error类型
		Code: NotFound,
		Msg:  "The resource you were trying to find could not be found.",
	}
}

---------------

func Err(err error) Response {
	if eErr, ok := err.(errors.Error); ok {   使用类型断言 过滤err的类别
		return Response{
			Code: eErr.Code,
			Msg:  eErr.Msg,
		}
	}

	logrus.Error(err)
	return Response{
		Code: errors.Unknown,
		Msg:  "未知错误",
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值