go - 在接口(interface)中具有复制方法的惯用方式

标签 go

在 Go 的接口(interface)中使用 Copy() 方法的惯用方法是什么?
我有一个结构 S可以返回自身的副本。
我还想要一个可以由任何可以返回自身副本的接口(interface)来实现。
下面的代码不会编译,因为你 cannot use S literal (type S) as type I in assignment ,但这基本上是我想要做的。
我也不想改(S) Copy() S(S) Copy() I因为:“实现包应该返回具体类型”
https://github.com/golang/go/wiki/CodeReviewComments#interfaces
我知道我可能需要泛型或其他东西,但除此之外,我们应该如何处理这种情况?

package main

type S struct {

}

func (S) Copy() S {
    return S{}
}

//====== another package ======

type I interface {
    Copy() I
}

func main() {
    var i I = S{}
    i.Copy()
}

最佳答案

没有泛型的唯一方法是定义 Copy 方法以返回接口(interface):

func (S) Copy() I {...}
您必须在需要时返回接口(interface)。

关于go - 在接口(interface)中具有复制方法的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63890595/

相关文章:

编码时未考虑 JSON 字段标记问题

go - 如果 go 包名称不以 github.com 开头,请注意?

Golang 模板无法访问 embedFS 中的文件

sql - 如何推迟 Postgres 中的外键约束

go - 使用 Go 后端的 net::ERR_CERT_INVALID

go - 接口(interface)上的 nil 测试失败

multithreading - 与 goroutine 并行运行代码的首选语法是什么?

json - 无法使用 GoLang 获取正确的 json 响应

unit-testing - golang 中的单元测试

mongodb - golang上的mongo随机记录