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 接口的主要内容,如果未能解决你的问题,请参考以下文章

pix三接口配置

GO语言基础之error

56_异常处理error,errors和painc的使用

GO_10:GO语言基础之error

接口接口测试常见响应码类型

“类型 B 不能是 C 的超接口;超接口必须是接口”错误