Golang:error包错误处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang:error包错误处理相关的知识,希望对你有一定的参考价值。
(目录)
1、Golang error包
内建error接口
// builtin.go
type error interface
Error() string
实现error接口
// errors.go
package errors
type errorString struct
s string
func (e *errorString) Error() string
return e.s
2、创建 error
定义
// package errors
func New(text string) error
// package fmt
func Errorf(format string, a ...any) error
代码示例
package main
import (
"errors"
"fmt"
)
func main()
// 方式一:通过字符串构建 error
err := errors.New("error")
fmt.Printf("err: %v\\n", err)
// err: error
// 方式二:格式化输出错误字符串
fmtErr := fmt.Errorf("this is a error: %s", "fmt error")
fmt.Printf("fmtErr: %v\\n", fmtErr)
// fmtErr: this is a error: fmt error
3、错误处理
3.1、抛出错误和处理错误
package main
import (
"errors"
"fmt"
)
// 自定义错误
var DBError = errors.New("DBError")
func getRecords() (any, error)
// 抛出错误
return nil, DBError
func main()
// 错误处理
_, err := getRecords()
if err != nil
fmt.Printf("err: %v\\n", err)
else
fmt.Printf("not err")
// err: DBError
3.2、errors.Is
package main
import (
"errors"
"fmt"
)
// 自定义错误
var DBError = errors.New("DBError")
// 错误包裹
var NotFoundError = fmt.Errorf("%w", DBError)
func getRecords() (any, error)
return nil, NotFoundError
func main()
// 错误处理
_, err := getRecords()
if err != nil
if errors.Is(err, DBError)
fmt.Println("err Is DBError")
if errors.Is(err, NotFoundError)
fmt.Println("err Is NotFoundError")
else
fmt.Printf("not err")
// err Is DBError
// err Is NotFoundError
3.3、errors.As
package main
import (
"errors"
"fmt"
)
// 自定义错误
type DBError struct
desc string
func (dbError DBError) Error() string
return dbError.desc
func getRecords() (any, error)
return nil, DBError
desc: "DBError",
func main()
// 错误处理
_, err := getRecords()
if err != nil
var dbError DBError
if errors.Is(err, dbError)
fmt.Println("err Is DBError")
if errors.As(err, &dbError)
fmt.Println("err As NotFoundError")
else
fmt.Printf("not err")
// err As NotFoundError
以上是关于Golang:error包错误处理的主要内容,如果未能解决你的问题,请参考以下文章