当前位置:   article > 正文

Golang:error包错误处理_golang err 字符串

golang err 字符串

1、Golang error包

内建error接口

// builtin.go
type error interface {
    Error() string
}
  • 1
  • 2
  • 3
  • 4

实现error接口

// errors.go
package errors


type errorString struct {
    s string
}

func (e *errorString) Error() string {
    return e.s
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2、创建 error

定义

// package errors
func New(text string) error {}

// package fmt
func Errorf(format string, a ...any) error {}
  • 1
  • 2
  • 3
  • 4
  • 5

代码示例

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
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

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
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

参考
Go 语言入门很简单:Go 语言的错误处理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/42815
推荐阅读
相关标签
  

闽ICP备14008679号