从零到一学习go语言_异常处理(四)

异常处理是开发编程中,必不可少的一部分;处理异常是编写可靠代码的一个重要特征;本章节中,我们会在greetings模块中,返回错误,并在另一个调用者模块中对期进行处理。

一、在上几章,开发的模块中,做如下改动:greetings.go中添加以下代码

package greetings

import (
    "errors"
    "fmt"
)

// Hello returns a greeting for the named person.
func Hello(name string) (string, error) {
    // If no name was given, return an error with a message.
    if name == "" {
        return "", errors.New("empty name")
    }

    // If a name was received, return a value that embeds the name 
    // in a greeting message.
    message := fmt.Sprintf("Hi, %v. Welcome!", name)
    return message, nil
}

关于greetings.go方法的说明:

  • Hello函数有两个返回值:一个string的返回值、一个error的返回值。对于调用方来说,需要检查第二个参数是否error存在(任何go函数都可以返回多个值)
  • 和java语言一样,需要通过import导入errors包的标准库,这样我们就可以使用errors.New函数了。
  • 添加了一段代码,通过校验传入的参数name是否为空,如果为空,调用errors.New方法,把错误描述信息返回出去。
  • 在成功返回的地方,需要把第二个参数,也就是error设置为nil返回,这样调用者就会判断方法调用正确。

 

二、在我们的调用者某块的hello/hello.go代码中,做如下改动,代码如下:

package main

import (
    "fmt"
    "log"

    "example.com/greetings"
)

func main() {
    //预设Logger输出
    //设置日志输出的前缀
    log.SetPrefix("greetings: ")
    //设置标志位,关闭时间、源文件和行号的输出
    log.SetFlags(0)

    //调用打招呼模块,请求hello函数
    message, err := greetings.Hello("")
    // 如果有error返回,打印该error,并且退出程序
    if err != nil {
        log.Fatal(err)
    }

    //如果没有异常,把返回信息打印在控制台中
    fmt.Println(message)
}

对hello.go代码的说明:

  • log.SetPrefix("greetins: "),通过调用log的标准库,设置了日志输出的前缀,并且通过flags标志不输出时间戳、和源文件、行号等相关信息。
  • 分配greetings.Hello("")返回的两个返回值,包括error和name变量
  • 如果我们传递的参数为空字符串,根据第一节的定义,此方法会返回error,如果我们发现error不为空,输出异常,并且退出程序。log.Fatal(error)就是做这个事情

三、现在greetings目录下,通过go build命令重新打包,并在hello目录下执行go run hello.go命令,确认代码是否生效,如果生效我们会看到如下输出

$ go run hello.go
greetings: empty name
exit status 1

总结知识点:

  • 在go中处理error是非常优雅简单的
  • 在go中,我们可以将error作为一个返回值,调用者通过校验返回值内容,看是否发生error,并对其进行相应的处理
  • error有相应的标准库,库中有很多我们可以调用的api,比如errors.New(""),可以返回error的自定义信息等
  • 通过log标准库,我们可以进行相应的日志输出。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值