内容正文:
千锋教育
Go语言开发实战
教学设计
课程名称: Go语言开发实战
授课年级: ______ ______________ ___
授课学期: ___ ____ ________ ________
教师姓名: ______________ ________
2019年09月01日
课程名称
第8章 Go语言异常处理
计划学时
4学时
内容分析
本章主要介绍error、defer、panic和recover机制
教学目标
与
教学要求
要求学生掌握error接口,掌握defer延迟,掌握panic及recover。
教学重点
error、defer、panic和recover机制
教学难点
error、defer、panic和recover机制
教学方式
课堂讲解及ppt演示
教
学
过
程
第一课时
(error)
回顾内容,引出本课时主题
1.回顾内容,引出本课时的主题
通过前面内容的学习,相信读者写出的程序功能越来越强大。纵使程序员万般小心,依然会出现各种突发的错误导致程序无法正常运行。为了保证程序的稳定性、可调试性,为了方便维护者的阅读和理解,降低维护成本,Go语言提供了异常处理。从而引出本节的内容。
2.明确学习目标
(1) 能够掌握error接口
(2) 能够掌握自定义error对象
(3) 能够掌握自定义错误
知识讲解
· error接口
错误是指程序中出现不正常的情况,从而导致程序无法正常执行。假设尝试打开一个文件,文件系统中不存在这个文件。这是一个异常情况,它表示为一个错误。
Go 语言通过内置的错误类型提供了非常简单的错误处理机制。即error接口。该接口的定义如下:
type error interface {
Error() string
}
error本质上是一个接口类型,其中包含一个Error()方法,错误值可以存储在变量中,通过函数中返回。它必须是函数返回的最后一个值。
在Go语言中处理错误的方式通常是将返回的错误与nil进行比较。nil值表示没有发生错误,而非nil值表示出现错误。如果不是nil,需打印输出错误。
· 创建error对象
结构体只要实现Error() string这种格式的结构体,就代表实现了该错误接口,返回值为错误的具体描述。通常程序会发生可预知的错误,所以Go语言errors包对外提供了可供用户自定义的方法,errors包下的New()函数返回error对象,errors.New()创建新的错误。errors包内代码如下:
// Package errors implements functions to manipulate errors.
package errors
// New returns an error that formats as the given text.
func New(text string) error {
return &errorString{text}
}
// errorString is a trivial implementation of error.
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
Go语言的errors.go源码定义了一个结构体,名为errorString,它拥有一个Error()的方法,实现了error接口,同时该包向外暴露了一个New()函数,该函数参数为字符串,返回值为error类型。
fmt包下的Errorf()函数返回error对象,fmt包下的Errorf()函数本质上还是调用errors.New()。使用格式如下。
// Errorf formats according to a format specifier and returns the string
// as a value that satisfies error.
func Errorf(format string, a ...interface{}) error {
return errors.New(Sprintf(format, a...))
}
· 自定义错误
自定义错误的实现步骤如下。
· 定义一个结构体,表示自定义错误的类型。
· 让自定义错误类型实现error接口 :Error() string。
· 定义一个返回error的函数。根据程序实际功能而定。
自定义错误的使用示例参见教材例8-3。