我试图在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
}这个版本更好吗?(是对的吗?)
发布于 2015-07-01 13:01:59
作业是一份副本。您的第二个函数接近了,您只需要取消引用s。
这会将*Server s复制到c
c := new(Server)
*c = *s至于深度复制,您需要遍历字段,并确定需要递归复制哪些内容。根据*httprouter.Router是什么,如果它包含未导出字段中的数据,则可能无法进行深度复制。
https://stackoverflow.com/questions/31161829
复制相似问题