当前位置: 首页 > news >正文

vs c 网站开发百度快速排名系统查询

vs c 网站开发,百度快速排名系统查询,photoshop 网站设计,平舆网站建设如果你习惯了 try catch 这样的语法后,会觉得处理错误真简单,然后你再来接触 Go 的错误异常,你会发现他好复杂啊,怎么到处都是 error,到处都需要处理 error。 首先咱们需要知道 Go 语言里面有个约定,就是一…

如果你习惯了 try catch 这样的语法后,会觉得处理错误真简单,然后你再来接触 Go 的错误异常,你会发现他好复杂啊,怎么到处都是 error,到处都需要处理 error。

首先咱们需要知道 Go 语言里面有个约定,就是一个方法的返回参数,我们通常习惯的把错误当最后一个参数返回(这虽然官方在这点上没有做硬性规定,但是大家也都习惯这么做)。

至于为啥 Go 要这样去设计处理异常,咱们这种干饭人事就不去分析了,官方怎么设计咱们就怎么遵守就好了。

一、简单错误创建

1、 errors 

我们可以使用 errors 包的 New 方法,传入一个字符串快速地创建。

var e error
e = errors.New("我是错误")

2、fmt 

 fmt 可以输出一些内容,同样他还能为我们创建错误。

var e error
e = fmt.Errorf("%s", "我还是错误")

 其实错误对 Go 语言来说,其实就是一段字符串。

 二、对错误进行编程

Go 语言中的错误定义是一个借口,只要是声明了 Error() string 这个方法,就意味着他就可以判定他是一个错误。

这是 Go 中的错误定义源码:

// 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() string
}

 1、自定义错误&使用

package mainimport ("fmt"
)type MyError string// 实现了Error的接口
func (this MyError) Error() string {return string(this)
}
func main() {var e errore = MyError("自定义的错误")fmt.Println(e)
}

 2、友好地返回错误

 可以把 string 换成 struct ,同时加入很多我们自定义的属性

package mainimport ("fmt"
)type MyError struct {Code intMsg  string
}func (this MyError) Error() string {return fmt.Sprintf("%d-%s", this.Code, this.Msg)
}func NewMyError(code int, msg string) *MyError {return &MyError{Code: code, Msg: msg}
}// FindUser 模拟下我们的业务方法
func FindUser() error {return NewMyError(404, "找不到内容")
}func main() {var e errore = FindUser()fmt.Println(e)
}

 三、错误的api

1、Is 

官方为我们提供了 Is 方法的 API,他默认使用 == 将特定的错误与错误链中的错误进行比较,如果不一样,就会去调用错误实现的 Is 方法进行比较。

先去实现下 Is 这个方法,随后我们使用 errors.Is 进行比较 

package mainimport ("errors""fmt""log"
)type MyError struct {Code intMsg  string
}func (this MyError) Error() string {return fmt.Sprintf("%d-%s", this.Code, this.Msg)
}func NewMyError(code int, msg string) *MyError {return &MyError{Code: code, Msg: msg}
}// FindUser 模拟下我们的业务方法
func FindUser() error {return NewMyError(404, "找不到内容")
}func (this *MyError) Is(target error) bool {log.Println("到这里来了....")if inputE, ok := target.(*MyError); ok {if inputE.Code == this.Code && inputE.Msg == this.Msg {return true}}return false
}func main() {var e errore = FindUser()log.Println(e)if errors.Is(e, NewMyError(404, "找不到内容")) {log.Println("是 ErrorNotFind")} else {log.Println("不是 ErrorNotFind")}if errors.Is(e, NewMyError(405, "找不到内容")) {log.Println("是 ErrorNotFind")} else {log.Println("不是 ErrorNotFind")}if errors.Is(e, NewMyError(404, "这是xxx错误")) {log.Println("是 ErrorNotFind")} else {log.Println("不是 ErrorNotFind")}
}

还可以有复杂的结构体来表示错误

2、Unwrap

不大常用的 API ,标准库里面 fmt.Errorf 就是一个非常典型的使用案例

package mainimport ("errors""fmt""log"
)type MyError struct {Code intMsg  string
}func (this MyError) Error() string {return fmt.Sprintf("%d-%s", this.Code, this.Msg)
}func NewMyError(code int, msg string) *MyError {return &MyError{Code: code, Msg: msg}
}// FindUser 模拟下我们的业务方法
func FindUser() error {return NewMyError(404, "找不到内容")
}func (this *MyError) Unwrap() error {this.Msg = "hello" + this.Msgreturn this
}func main() {var e errore = FindUser()log.Println("最原始的错误:", e)wE := errors.Unwrap(e)log.Println("加了上下文的错误:", wE)
}

http://www.yayakq.cn/news/620963/

相关文章:

  • 深圳微信网站定制邵阳市今天新闻
  • jsp旅游网站开发系统中型网站每天访问量
  • 长沙网站开发长沙网站建设淄博网站推广优化
  • 网站源码如何优化怎样可以查看网站是由哪个公司做的
  • 领卷网站怎么做南昌网站建设案例
  • 南京做企业号微网站营销个人网站建设优化
  • 网站优化怎么看广告外链购买平台
  • 网站建设辶首先金手指十四百度互联网营销是什么
  • 网站开发90天网站建设费用如何做账务处理
  • 网站建设费 无形资产哈尔滨企业自助建站系统
  • 数据系统网站建设必要性wordpress主题图片修改
  • 个人电脑做网站服务器网站开发开发需求文档模板
  • 如何注册一个设计网站合肥网站建设公司加盟
  • 网站美工和平面设计师沈阳男科医院排名哪家好
  • 互联网科技公司网站网站建设费 开办费
  • 帝国cms入门到精通企业门户网站制作建站视频教程深圳手机网站设计公司
  • 传送门网站是怎么做的攀枝花住房和城乡建设厅网站
  • 三合一网站什么意思中咨工程咨询有限公司
  • 网站开发宣传方法权重查询入口
  • 教育房地产 网站建设杭州网络运营公司排名
  • 家装设计师培训学校学费跨境电商seo是什么意思
  • 加速网站的加速器青岛网站建设软件下载
  • 找人做网站 优帮云网站搭建哪家好
  • 如何做网盟推广网站做网站做系统
  • 做明星同款的网站个人音乐网站模板
  • 竣工验收备案表查询网站泰州seo网络公司
  • 企业网站内容如何搭建长沙商城网站建设报价公示
  • 网站建设创业书wordpress投稿页面路径怎么写
  • 做PS的赚钱的网站wordpress卡蜜 插件
  • 云速成美站中企动力做网站