首页  >  文章  >  后端开发  >  我们如何在 Go 中实现通用错误处理而不丢失类型信息?

我们如何在 Go 中实现通用错误处理而不丢失类型信息?

DDD
DDD原创
2024-11-04 02:22:02419浏览

How Can We Implement Generic Error Handling in Go Without Losing Type Information?

带有 Must Function 的错误处理泛型

使用同时返回值和错误的函数时,处理错误可能会很麻烦。 Go 中缺乏泛型使得开发适用于所有可能场景的解决方案具有挑战性。

提供的示例尝试创建一个名为 P 的函数来包装任何此类函数,如果发生错误就会失败。虽然可以有效地处理错误,但它会丢失类型信息,从而导致接口为空。

一种潜在的解决方案涉及使用代码生成技术为您需要使用的每种具体类型创建 P 的特定实现。通过使用“gengen”、“genny”或“gen”等库,您可以生成保留正确类型信息的 P 的自定义实例。

例如,如果您的函数返回一个整数和一个错误:

<code class="go">func MyFunction() (int, error) {
    ...
}</code>

使用代码生成器,您可以为此函数创建 P 的特定实现:

<code class="go">func P_MyFunction(any interface{}, err error) (int) {
    if err != nil {
        panic("error: "+ err.Error())
    }
    return any.(int)
}</code>

此方法可确保维护类型信息,允许您调用P_MyFunction 并无缝地处理返回的整数。但是,它需要为每个函数和类型组合生成特定的实现,如果您有很多这样的函数,这可能会很乏味。

以上是我们如何在 Go 中实现通用错误处理而不丢失类型信息?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn