一尘不染

在没有泛型的情况下编写泛型函数

go

我知道Go将来不会有泛型,并且有一些建议可以用其他结构代替它们。但是在下面的例子中,我陷入了困境。

func P(any interface{}, err error) (interface{}) {
    if err != nil {
        panic("error: "+ err.Error())
    }
    return any
}

您可能会猜到,我试图使任何错误均告失败,并且希望将P()任何返回两个结果的函数放到第二个错误中。这工作正常,但any丢失了它的类型信息,并且结果中只是一个空接口。

由于我也正在调用lib函数,因此我看不到使用Interfaces或Reflection解决此问题的方法。

有任何想法吗?我是完全走错了道路还是接近目标?


阅读 181

收藏
2020-07-02

共1个答案

一尘不染

一种解决方案是针对go generate您的P()功能,针对您需要使用的每种具体类型提供一种解决方案。
请参阅以下示例:

这将使调用这些lib函数更加容易,因为生成的具体P()实现将使用正确的类型而不是interface {}。

2020-07-02