go - 错误处理设计-需要根据错误类型在函数堆栈的顶部处理错误,但需要在堆栈中添加信息

标签 go design-patterns error-handling

我需要在Go中重构代码,以便传播到主要功能的不同类型的错误将导致采取不同的处理措施。在任何情况下,都应记录错误消息。

我通常只会有不同类型的错误,并且它们是从基本错误类派生的,每个错误类对应于我要采取的一种操作。
此方法不适用于此代码,因为错误会不断被重写,以便为错误字符串添加更多上下文。

例如。 --

func start_something(...)(...){
    var, err = get_something()
     if err != nil {
          return fmt.Errorf("unable to start something: %w", err.string())
     }
}

我可以将魔术字符串添加到错误中,然后解析main中的错误消息。这感觉太难看了。
将不胜感激如何编写此建议的任何方向。尤其是从那些具有Go语言编写经验的人那里,可以将我带到正确的Go语言编写方法中。

谢谢,

最佳答案

使用fmt.Errorf("unable to start something: %w", err)包装错误。您可以通过实现errors软件包文档中所述的Unwrap() error方法来创建自己的错误包装程序。

使用errors.As查找与目标类型匹配的包装错误链中的第一个错误。

使用errors.Is确定包装的错误链中的任何错误是否与目标类型匹配。

关于go - 错误处理设计-需要根据错误类型在函数堆栈的顶部处理错误,但需要在堆栈中添加信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62245521/

相关文章:

struct - 在 Go 中使用结构进行原子比较和交换

java - 工厂方法实现

c++ - 此代码有什么问题?它永无止境(二叉树的顶 View )

go - 哪种扫描用于从字符串中读取 float ?

arrays - 在 golang 中使用 neast 和数组创建高级结构

python - golang 中数组的子集

java - 最佳实践 : Design pattern for 2D HUD screen navigation

java - 什么是工作线程,它们在 react 器模式中的作用是什么?

php - 错误处理: set_error_handler() expects the argument (errorHandler) to be a valid callback

php - “WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong” WooCommerce错误