好的,虽然没有其他人可以给我适当的参考,但我找到了一些参考示例,介绍了如何克隆自己的Go和想要共享。
(如果这个答案对您有用,请只给我几个投票。我不是要赢得选票。欢迎其他更好的答案和评论)
我在“ github.com/jinzhu/gorm”包(数据库的ORM库)中找到了该原型,以供参考:
func (s *DB) clone() *DB { db := &DB{ ... } ... return db}软件包“ golang.org/x/net/html/atom”中的相似模式:
func (n *Node) clone() *Node { m := &Node{ Type: n.Type, ... } ... return m}如果Clone()的调用方在克隆时始终知道您的对象类型,那么上述原型就足够了。(并且您需要大写
Clone()以使该方法成为“ public”)
但是,如果您希望变量可以包含类似基本接口的任何对象的高级功能,这是我的示例:
func (t *T) Clone() YourbaseInterface
YourbaseInterface在哪里:
type YourbaseInterface interface { Clone() YourbaseInterface OtherMethod1() ...}或者可以只使用
interface{}代替而不是YourbaseInterface返回,然后像
obj2 :=obj.Clone().(*YourbaseType)克隆后一样进行类型转换。
警告
这种原型有一个缺点。becase的Golang不支持此原型内置的,该
Clone()方法不会在一些语言的功能调用,例如,当你
copy(dest,src)一个
[]YourTypeWithClone切片。相反,它仍然执行简单的
*elem2 =*elem1结构复制。解决方案可能不使用这些内置函数,或者您可能会回过头来设计类struct成员,以便在可能的情况下进行纯复制就足以实现其复制目的。



