网站建设的需求方案怎么写,做网站tt0546,管理信息系统网站建设,ios开发者选项Go语言基础之Error接口1.Error 接口2.创建错误3.fmt.Errorf1.Error 接口
Go 语言中把错误当成一种特殊的值来处理#xff0c;不支持其他语言中使用try/catch捕获异常的方式
Go 语言中使用一个名为 error 接口来表示错误类型
type error interface {Error() string
}error 接…
Go语言基础之Error接口1.Error 接口2.创建错误3.fmt.Errorf1.Error 接口
Go 语言中把错误当成一种特殊的值来处理不支持其他语言中使用try/catch捕获异常的方式
Go 语言中使用一个名为 error 接口来表示错误类型
type error interface {Error() string
}error 接口只包含一个方法——Error这个函数需要返回一个描述错误信息的字符串。
当一个函数或方法需要返回错误时我们通常是把错误作为最后一个返回值。例如下面标准库 os 中打开文件的函数。
func Open(name string) (*File, error) {return OpenFile(name, O_RDONLY, 0)
}由于 error 是一个接口类型默认零值为nil。所以我们通常将调用函数返回的错误与nil进行比较以此来判断函数是否返回错误。例如你会经常看到类似下面的错误判断代码
file, err : os.Open(./xx.go)
if err ! nil {fmt.Println(打开文件失败,err:, err)return
}2.创建错误
我们可以根据需求自定义 error最简单的方式是使用errors 包提供的New函数创建一个错误
我们可以在函数返回时快速创建一个错误
package mainimport (errorsfmt
)func queryById(id int64) (string, error) {if id 0 {return , errors.New(无效的id)}return 可以了, nil
}func main() {s, err : queryById(12)fmt.Println(s, err) // 可以了 nils, err queryById(-2)fmt.Println(s, err) // 无效的id
}或者用来定义一个错误变量例如标准库io.EOF错误定义如下
var EOF errors.New(EOF)3.fmt.Errorf
当我们需要传入格式化的错误描述信息时使用fmt.Errorf是个更好的选择
fmt.Errorf(查询数据库失败err:%v, err)但是上面的方式会丢失原有的错误类型只拿到错误描述的文本信息。
为了不丢失函数调用的错误链使用fmt.Errorf时搭配使用特殊的格式化动词%w可以实现基于已有的错误再包装得到一个新的错误。
fmt.Errorf(查询数据库失败err:%w, err)