You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:20:42