在 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/