为了账号安全,请及时绑定邮箱和手机立即绑定

深入/浅拷贝

深入/浅拷贝

Go
守着一只汪 2021-10-18 16:16:30
我试图在 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}这个版本好点了吗?(这是正确的吗?)
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

作业副本。你的第二个函数很接近,你只需要取消引用s.

这将复制*Server sc

c := new(Server)
*c = *s

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


查看完整回答
反对 回复 2021-10-18
  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信