我知道Go将来不会有泛型,并且有一些建议可以用其他结构代替它们。但是在下面的例子中,我陷入了困境。
func P(any interface{}, err error) (interface{}) { if err != nil { panic("error: "+ err.Error()) } return any }
您可能会猜到,我试图使任何错误均告失败,并且希望将P()任何返回两个结果的函数放到第二个错误中。这工作正常,但any丢失了它的类型信息,并且结果中只是一个空接口。
P()
any
由于我也正在调用lib函数,因此我看不到使用Interfaces或Reflection解决此问题的方法。
有任何想法吗?我是完全走错了道路还是接近目标?
一种解决方案是针对go generate您的P()功能,针对您需要使用的每种具体类型提供一种解决方案。 请参阅以下示例:
go generate
这将使调用这些lib函数更加容易,因为生成的具体P()实现将使用正确的类型而不是interface {}。