首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深/浅拷贝

深/浅拷贝
EN

Stack Overflow用户
提问于 2015-07-01 12:50:37
回答 1查看 9.3K关注 0票数 6

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

代码语言:javascript
复制
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。这至少是一个正确的浅表副本吗?第二个问题是,是否有一种更为惯用的方式来执行深(或浅)的复制?

编辑:

我所讨论的另一种选择非常简单,并且使用了一个事实,即参数是通过值传递的。

代码语言:javascript
复制
func (s *Server) Copy() (s2 *Server) {
    tmp := s
    s2 = &tmp
    return
}

这个版本更好吗?(是对的吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-01 13:01:59

作业是一份副本。您的第二个函数接近了,您只需要取消引用s

这会将*Server s复制到c

代码语言:javascript
复制
c := new(Server)
*c = *s

至于深度复制,您需要遍历字段,并确定需要递归复制哪些内容。根据*httprouter.Router是什么,如果它包含未导出字段中的数据,则可能无法进行深度复制。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31161829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档