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包错误处理的主要内容,如果未能解决你的问题,请参考以下文章

golang 错误处理channel+error真的香

golang 错误处理channel+error真的香

golang 错误处理channel+error真的香

干货大放送~golang错误处理之error

Golang error 的突围

GoLang之错误处理