eat*_*hil 5 struct deep-copy go
我试图在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
}
Run Code Online (Sandbox Code Playgroud)
第一个问题,这不是一个很深的副本,因为我不是在复制s.Auth.这至少是一个正确的浅拷贝吗?第二个问题,是否有一种更惯用的方式来执行深(或浅)复制?
编辑:
我玩过的另一种选择非常简单,并且使用了参数按值传递的事实.
func (s *Server) Copy() (s2 *Server) {
tmp := s
s2 = &tmp
return
}
Run Code Online (Sandbox Code Playgroud)
这个版本更好吗?(这是对的吗?)
Jim*_*imB 11
作业是一份副本.你的第二个功能接近,你只需要取消引用s.
这将复制*Server s到c
c := new(Server)
*c = *s
Run Code Online (Sandbox Code Playgroud)
对于深层复制,您需要遍历这些字段,并确定需要递归复制的内容.根据具体*httprouter.Router情况,如果包含未导出字段中的数据,则可能无法进行深层复制.
| 归档时间: |
|
| 查看次数: |
5585 次 |
| 最近记录: |