约定
一、异常的使用场景
什么情况下用错误表达,什么情况下用异常表达,就得有一套约定,否则很容易出现一切皆错误或一切皆异常的情况
1.空指针引用
2.下标越界
3.除数为0
4.不应该出现的分支,比如default
二、约定
- 错误:
1.失败的原因只有一个时,不使用error,返回bool类型
// 错误的原因只有一个
func ValidName(name string) error {
if name != "halle" {
return errors.New("name is not hallen")
}
return nil
}
2.没有失败时,不使用error
type Person2 struct {
Name string
}
// 不会发生错误
func (p *Person2)GetName(str string) error{
p.Name = str
return nil
}
3.error应放在返回值类型列表的最后
4.错误值统一定义
errors.New("name is not hallen")
这里面的错误信息,使用预定义常量,不要临时定义错误信息
5.当上层函数不关心错误时,建议不返回error
- 异常
1.在程序部署后,应恢复异常避免程序终止
2.在分支语句中,对现有的判断以外的应作异常处理(default中)