深入/浅拷贝

我试图在 Go 中复制一个结构体,但在这方面找不到很多资源。这是我所拥有的:


type Server struct {

    HTTPRoot       string // Location of the current subdirectory

    StaticRoot     string // Folder containing static files for all domains

    Auth           Auth

    FormRecipients []string

    Router         *httprouter.Router

}


func (s *Server) Copy() (c *Server) {

    c.HTTPRoot = s.HTTPRoot

    c.StaticRoot = s.StaticRoot

    c.Auth = s.Auth

    c.FormRecipients = s.FormRecipients

    c.Router = s.Router

    return

}

第一个问题,这不会是深拷贝,因为我不是在拷贝 s.Auth。这至少是一个正确的浅拷贝吗?第二个问题,是否有更惯用的方式来执行深(或浅)复制?


编辑:


我玩过的另一种选择非常简单,它使用了参数按值传递的事实。


func (s *Server) Copy() (s2 *Server) {

    tmp := s

    s2 = &tmp

    return

}

这个版本好点了吗?(这是正确的吗?)


守着一只汪
浏览 145回答 1
1回答

ITMISS

作业是副本。你的第二个函数很接近,你只需要取消引用s.这将复制*Server s到cc := new(Server) *c = *s至于深拷贝,则需要遍历字段,并确定需要递归复制的内容。*httprouter.Router如果它包含未导出字段中的数据,则取决于是什么,您可能无法进行深层复制。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go