059- error 接口
Posted --Allen--
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了059- error 接口相关的知识,希望对你有一定的参考价值。
1. error 接口
一直以来,我们到处都能看到 error 作为很多函数的返回值类型出现,我们也没太关注它,一般都以下面这样的形式看到它:
// err := ...
if err != nil
fmt.Printf("%v\\n", err)
这个 error 实际上是接口类型:
type error interface
Error() string
2. 创建 error 对象
从概念上说,只要你的类型实现了 Error 方法,那它就可以实例化出 error 对象。在 Go 里有一个典型的例子是 Errno 类型:
package syscall
type Errno uintptr
func (e Errno) Error() string
其实它就是 POSIX 操作系统中定义的错误码类型。
我们也可以使用 errors 包中的 New 函数来快速创建一个 error 对象:
package main
import (
"errors"
"fmt"
)
func main()
err := errors.New("这是一个 error 对象")
if err != nil
fmt.Print(err)
3. 判断 error 类型
我们经常会有判断某个函数返回 error 类型的需求,比如:
package main
import (
"fmt"
"syscall"
)
func main()
_, err := syscall.Open("./test.txt", syscall.O_RDONLY, 0)
// 下一节就会讲到的语法
if e, ok := err.(syscall.Errno); ok && e == 2
fmt.Printf("Error: %v\\n", e)
syscall.Open 函数返回的第一个值是文件描述符,这里我们忽略它。第二个返回值是一个实现了 error 接口的类型,实际上它就是 syscall.Errno 类型,不过我们并不能确定,因此我们使用了下面的语法:
if e, ok := err.(syscall.Errno); ok && e == 2
上面这简单的说就是先判断 err 接口的类型部分是不是 syscall.Errno 类型,如果是,再判断 e 的值是不是 2.
这段语法在 Go 里叫类型断言,下一讲,我们继续。
4. 总结
- 掌握 error 接口
以上是关于059- error 接口的主要内容,如果未能解决你的问题,请参考以下文章