Go中如何实现带泛型的通用接口?遇实例化报错
解决Go泛型接口实例化报错问题
你遇到的错误是因为useCase是泛型接口,直接在User和Admin接口中嵌套时没有指定类型参数,Go要求泛型类型必须实例化后才能使用。
解决方案:为嵌套的泛型接口指定具体类型参数
根据User和Admin对应的业务场景,明确useCase的输入输出类型参数,将泛型接口实例化为具体接口后再嵌入。修改后的代码如下:
type input interface { models.InputUser | models.InputAdmin } type output interface { models.OutputUser | models.OutputAdmin } type useCase[i input, o output] interface { Create(i) error Get() o Update(i) error } // User接口绑定useCase的具体类型参数:InputUser和OutputUser type User interface { useCase[models.InputUser, models.OutputUser] } // Admin接口绑定useCase的具体类型参数:InputAdmin和OutputAdmin,同时扩展额外方法 type Admin interface { useCase[models.InputAdmin, models.OutputAdmin] GetAll() models.OutputAdmin Delete(models.InputAdmin) error }
原理说明
泛型接口useCase[i input, o output]本质是一个接口模板,只有当你为它指定具体的类型参数(比如models.InputUser和models.OutputUser)后,它才会成为一个可被嵌入或实现的具体接口。
如果需要让User或Admin本身也支持泛型,也可以这样定义(适用于需要动态适配多种输入输出类型的场景):
type User[I input, O output] interface { useCase[I, O] }
内容的提问来源于stack exchange,提问作者pxtc
相关产品推荐
相关产品推荐

