自定义错误

  1. 因为error是一个接口,因此我们可以自定义一个error
  2. 实际开发中我们要判断错误的类型,直接进行类型断言(也可以通过switch进行类型断言分支)

三部曲自定义一个错误

  1. 自定义一个错误结构体
  2. 实现我们的Error方法
  3. 返回错误的时候直接返回一个&我们自己的错误

注意:我们最常用的就是errors.New(字符串)

具体实现

主要代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package main

import (
"fmt"
)

/**
* @Author: yirufeng
* @Email: yirufeng@foxmail.com
* @Date: 2020/10/5 12:10 下午
* @Desc: 错误处理,3部曲,自己已经罗列在下方了
背景:因为error是一个interface,因此我们可以自定义错误,并进行返回

另外一种返回错误的方法,比较常用:`return errors.New("这是一个简单的错误")`
*/

//自定义一个错误
//1. 自定义一个错误结构体
type FileError struct {
Path string //记录文件所在路径
Err string //记录文件名
OpType string //记录对文件的什么操作
}

//2. 实现Error方法
func (f *FileError) Error() string {

return fmt.Sprintf("%s %s %s", f.Path, f.Err, f.OpType)
}

//3. 返回的时候直接返回我们错误结构体的引用
func fail() error {
//另外一种返回错误的方法,比较常用
//return errors.New("这是一个简单的错误")
return &FileError{
Path: "./",
Err: "无法打开文件",
OpType: "read",
}
}

func main() {
err := fail()
if err != nil {
fmt.Println(err)
}

fmt.Println()
}

评论