如何在 Golang 中处理多个错误?

golang 中处理多个错误的实用的方法包括:使用 error.is 函数逐级检查错误。使用 errors.as 函数转换错误,获取特定类型的错误。使用包装错误添加附加信息,帮助调试。

如何在 Golang 中处理多个错误?

在 Golang 中,处理多个错误可能会很棘手。以下是一些实用的方法:

使用 error.Is 函数

立即学习go语言免费学习笔记(深入)”;

error.Is 函数可以检查一个错误是否表示另一个错误。这对于逐级检查错误很有用。

代码示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import (

“errors”

“fmt”

)

var (

ErrInvalidInpu项目网点我wcqh.cnt = errors.New(“invalid input”)

ErrDatabase = errors.New(“database error”)

)

func main() {

err := checkInput()

if err == ErrInvalidInput {

// …

} else if errors.Is(err, ErrDatabase) {

// …

} else {

// 未知错误

}

}

登录后复制

使用 errors.As 函数

errors.As 函数将错误转换为特定类型的错误,如果转换失败,则返回 nil。这对于从不同来源获取错误很有用。

代码示例:

1

2

3

4

5

6

7

8

9

10

11

12

13项目网点我wcqh.cn

14

15

16

17

18

19

20

21

22

23

24

25

import (

“errors”

“fmt”

)

var (

ErrInvalidInput  = errors.New(“invalid input”)

ErrDatabase      = errors.New(“database error”)

ErrCustom        = errors.New(“custom error”)

)

func main() {

err := checkInput()

var dbErr error

if errors.As(err, &dbErr) {

// dbErr 包含数据库错误

} else if errors.As(项目网点我wcqh.cnerr, &ErrCustom) {

// …

} else if err == ErrInvalidInput {

// …

} else {

// 未知错误

}

}

登录后复制

使用包装错误

包装错误可以将附加信息添加到现有错误中,帮助调试。

代码示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import (

“fmt”

)

type DatabaseError struct {

cause error

}

func (err *DatabaseError) Error() string {

return fmt.Sprintf(“database error: %s”, err.cause)

}

func che项目网点我wcqh.cnckInput() error {

// …

return &DatabaseError{cause: ErrInvalidInput}

}

登录后复制

通过使用这些方法,你可以有效地处理 Golang 中的多个错误,从而提高代码的健壮性和可维护性。

以上就是如何在 Golang 中处理多个错误?的详细内容,更多请关注青狐资源网其它相关文章!

© 版权声明
THE END
喜欢就支持一下吧
点赞431 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容