首页 > 后端开发 > Golang > 如何在没有泛型的 Go 中实现泛型错误处理?

如何在没有泛型的 Go 中实现泛型错误处理?

Susan Sarandon
发布: 2024-11-04 12:48:01
原创
347 人浏览过

How to Implement Generic Error Handling in Go Without Generics?

在 Go 中实现通用错误处理

Go 缺乏通用功能,这在尝试泛化功能时带来了挑战。一个常见的场景是需要一个适用于任何返回值和错误的函数的通用错误处理函数。

提供的示例演示了使用空接口创建此类函数的尝试:

<code class="go">func P(any interface{}, err error) (interface{}) {
    if err != nil {
        panic("error: "+ err.Error())
    }
    return any
}</code>
登录后复制

虽然此方法适用于错误处理,但它会丢失类型信息,从而使生成的接口为空。

生成特定于类型的错误处理函数

为了避免丢失类型信息的问题,请考虑使用代码生成来为不同类型创建错误处理函数的专门实现。这可以使用“gogenerate”、“gengen”、“genny”或“gen”等工具来实现。

例如,使用“gen”,您可以定义一个模板:

<code class="text">// template.go

package main

import "fmt"

func P[T any](v T, err error) (T) {
    if err != nil {
        panic(fmt.Sprintf("error: %v", err))
    }
    return v
}</code>
登录后复制

此模板可用于生成 P() 的特定于类型的实现:

<code class="sh">gen generate</code>
登录后复制

这将创建这样的实现as:

<code class="go">// p_int.go

package main

func PInt(v int, err error) (int) {
    if err != nil {
        panic(fmt.Sprintf("error: %v", err))
    }
    return v
}</code>
登录后复制

通过使用这些生成的函数,可以保留类型信息,并且可以将错误处理无缝地应用于特定类型。

以上是如何在没有泛型的 Go 中实现泛型错误处理?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板