我刚刚看到Go在其最新版本中加入了泛型,我正在try 创建一个小项目来了解它是如何工作的.除了现在非常简单的通用函数之外,我似乎不知道它是如何工作的.我希望能够做到这样:

type Dao[RT any] interface {
    FindOne(id string) *RT
}

type MyDao struct {
}

type ReturnType struct {
    id int
}

func (m *MyDao) FindOne(id string) *ReturnType {
    panic("implement me")
}

// how should this look like?

func NewMyDao() *Dao[ReturnType] {
    return &MyDao[ReturnType]{}
}

这可能吗?我似乎没有以这种方式实现接口,我try 了许多相同的组合.

有没有实现通用接口的方法?如果不是,是否只返回interface{}类型?

谢谢.

推荐答案

类型*MyDao实现接口Dao[ReturnType].因此,函数应该如下所示:

func NewMyDao() Dao[ReturnType] {
    return &MyDao{}
}

请注意,返回类型是泛型接口的一个实例,返回值只是*MyDao类型的一个实例.

Go相关问答推荐

Go Colly-访问for循环中的URL

如何使用工作区方法扩展克隆的Golang库

转到http服务器头内容-类型设置为多部分/表单-数据,但在客户端获取内容-类型:文本/纯文本

为什么 `go mod` 占用了另一个磁盘上的空间而不是我的 GOPATH?

为什么标准库中的 IsSorted 会反向迭代切片?

Go - 永远停止带有上下文的循环

Go test "-run -" 标志执行测试更快

Go Programming Language书上的例子server2错了吗?

GitHub 中 REST API 的 aws 凭证问题

上传图片失败,出现错误dial tcp: lookup api.cloudinary.com: no such host

Go 切片容量增长率

为什么不同的 Wireguard 私钥会产生相同的公钥?

枚举的 Golang 验证器自定义验证规则

如何在 golang revel 中获取动态应用程序配置

为什么时间很短.睡眠时间比基准测试中要求的(约 300 ns)长?

跟踪长时间运行的任务的进度 - 正确的方法

如何在 Windows 中使用 github.com/AllenDang/giu 和 github.com/gordonklaus/portaudio 构建 GO 程序

Golang:每个键具有多个值的映射

如何排除溢出矩阵的坐标

Go:为一组单个结果实现 ManyDecode