error接口
文章发布较早,内容可能过时,阅读注意甄别。
# 1,概述。
Go 语言引入了一个关于错误处理的标准模式,即 error 接口,它是 Go 语言内建的接口类型,该接口的定义如下:
type error interface {
Error() string
}
1
2
3
2
3
Go 语言的标准库代码包 errors 为用户提供如下方法:
package errors
type errorString struct {
text string
}
func New(text string) error {
return &errorString{text}
}
func (e *errorString) Error() string {
return e.text
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
另一个可以生成 error 类型值的方法是调用 fmt 包中的 Errorf 函数:
package fmt
import "errors"
func Errorf(format string, args ...interface{}) error {
return errors.New(Sprintf(format, args...))
}
1
2
3
4
5
6
2
3
4
5
6
# 2,error 接口的使用。
# 1,简单示例。
package main
import "fmt"
import "errors"
func main() {
//先使用fmt包内的错误方法
//var err1 error = fmt.Errorf("s%","this is normal err1") 等价于下边的
err1 := fmt.Errorf("%s", "this is normal err1")
fmt.Println("err1 = ", err1)
//或者直接使用error包
err2 := errors.New("this is normal err2")
fmt.Println("err2 = ", err2)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 2,如何应用。
package main
import "fmt"
import "errors"
func MyDiv(a, b int) (result int, err error) {
err = nil
if b == 0 {
err = errors.New("分母不能为0")
} else {
result = a / b
}
return
}
func main() {
result, err := MyDiv(10, 0)
if err != nil {
fmt.Println("err = ", err)
} else {
fmt.Println("result = ", result)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
上次更新: 2024/11/19, 23:11:42