5.1 错误处理

go语言没有异常处理,一般通过返回值处理错误。例如strconv.Atoi函数将一个字符串转换成一个整数:

package main

import (
    "fmt"
    "os"
    "strconv"
)

func main() {
    if len(os.Args) != 2 {
        os.Exit(1)
    }
    n, err := strconv.Atoi(os.Args[1])
    if err != nil {
        fmt.Println("not a valid number")
    } else {
        fmt.Println(n)
    }
}

你也可以自己创建一个错误类型;唯一的要求就是它必须实现内置类型error接口:

type error interface {
    Error() string
}

通常情况下,我们可以通过导入errors包,然后使用包中的New函数创建一个自己的错误类型:

import (
    "errors"
)

func process(count int) error {
    if count < 1 {
        return errors.New("Invalid count")
    }
    ...
    return nil
}

go的标准库就是通过这种模式使用错误类型变量。例如,在io包中,有一个EOF变量定义如下:

var EOF = errors.New("EOF")

这是一个包级别变量(它是定义在函数外面),该变量是可以访问的(因为第一个字母是大写字母)。当我们从文件或者标准输入中读取数据时,很多函数都能返回这种错误。如果有上下文关系,你也应该使用这个错误。作为消费者,我们可以使用这个单例:

package main

import (
    "fmt"
    "io"
)

func main() {
    var input int
    _, err := fmt.Scan(&input)
    if err == io.EOF {
        fmt.Println("no more input!")
    }
}

最后要指出的是,go语言有panicrecover函数。panic类似抛出异常,而recover类似捕获异常;但是很少使用它们。

链接

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""