上两章节中简单描述了,我们如何自定义模块,以及如何依赖自定义模块进行方法的调用。接下来我们来学习下如何在
Go中更好的处理异常。
处理错误是可靠代码的一个基本特性。接下来通过添加一些代码来从greetings模块返回一个错误,然后在调用者中处理它。
代码编写
需要对于上节我们编写的代码进行修改。
-
修改代码,增加判断条件,如果名称为空,则返回一个错误(修改后的代码如下):
package greetings import ( "errors" "fmt" ) func Hello(name string) (string, error) { if name == "" { return "", errors.New("empty name") } message := fmt.Sprintf("Hi, %v. Welcome!", name) return message, nil }在上述代码中,我们可以发现以下变化:
- 函数返回值数目增加。(调用者可以通过第二个值进行判断是否发生错误,详情见Effective Go)
- 导入
Go标准库错误包。 - 增加条件判断,如果输入空字符串,则进行返回一个包含错误的返回值。
- 如果调用成功,第二个返回值则置空,表示当前是正常调用返回。
-
接下来进行
hello.go代码的修改,我们需要增加错误的一种情况处理。package main import ( "fmt" "log" "example.com/greetings" ) func main() { log.SetPrefix("greetings: ") log.SetFlags(0) message, err := greetings.Hello("") if err != nil { log.Fatal(err) } fmt.Println(message) }针对调用方,我们也进行了如下的修改变化:
- 引入日志包,在方法调用之前进行输出。
- 调用函数返回值进行赋值给临时变量。
- 判断是否有错误产生,如有错误发生则进行错误日志的打印并停止程序。
-
接下来我们运行
hello.go程序,看看程序代码是否生效。[root@montos-prod hello]# go run . greetings: empty name exit status 1
可以看出代码的输出结果跟我们预想的一致,此时处理异常事件也就完成了。
代码运行总结
异常可能是代码在运行期间可能经常发生的事情,我们只有处理好对于异常的处理,才能更好的使我们代码健壮起来。
对于Go这种处理异常的逻辑,我们需要注意的就是代码如果是你自己编写的,那么你是了解返回值中是否包含异常的情况,如果不是你编写的,那么就看对应的开发是否能够将文档更好的完善,标注好异常参数的定义。