打印异常信息
优质
小牛编辑
155浏览
2023-12-01
Go 语言中提供了两种创建异常信息的方式
方式一:通过 fmt 包中的 Errorf 函数创建错误信息,然后打印
package main import "fmt" func main() { // 1.创建错误信息 var err error = fmt.Errorf("这里是错误信息") // 2.打印错误信息 fmt.Println(err) // 这里是错误信息 }
方式二:通过 errors 包中的 New 函数创建错误信息,然后打印
package main import "fmt" func main() { // 1.创建错误信息 var err error = errors.New("这里是错误信息") // 2.打印错误信息 fmt.Println(err) // 这里是错误信息 }
两种创建异常信息实现原理解析
- Go 语言中创建异常信息其实都是通过一个 error 接口实现的
- Go 语言再
builtin
包中定义了一个名称叫做 error 的接口,源码如下
package builtin // 定义了一个名称叫做error的接口 // 接口中声明了一个叫做Error() 的方法 type error interface { Error() string }
在 errors 包中定义了一个名称叫做 errorString 的结构体,利用这个结构体实现了 error 接口中指定的方法
并且在 errors 包中还提供了一个 New 方法,用于创建实现了 error 接口的结构体对象,并且在创建时就会把指定的字符串传递给这个结构体
// 指定包名为errors package errors // 定义了一个名称叫做errorString的结构体, 里面有一个字符串类型属性s type errorString struct { s string } // 实现了error接口中的Error方法 // 内部直接将结构体中保存的字符串返回 func (e *errorString) Error() string { return e.s } // 定义了一个New函数, 用于创建异常信息 // 注意: New函数的返回值是一个接口类型 func New(text string) error { // 返回一个创建好的errorString结构体地址 return &errorString{text} }
fmt 包中 Errorf 底层的实现原理其实就是在内部自动调用了 errors 包中的 New 函数
func Errorf(format string, a ...interface{}) error { return errors.New(Sprintf(format, a...)) }
应用场景
package main import "fmt" func div(a, b int) (res int, err error) { if(b == 0){ // 一旦传入的除数为0, 就会返回error信息 err = errors.New("除数不能为0") }else{ res = a / b } return } func main() { //res, err := div(10, 5) res, err := div(10, 0) if(err != nil){ fmt.Println(err) // 除数不能为0 }else{ fmt.Println(res) // 2 } }