### 深拷贝map ### 方法一 encoding/gob包 ```go import "encoding/gob" // 需要什么类型的map注册类型就可以 func DeepCopy(dst, src interface{}) error { var buf bytes.Buffer gob.Register(map[string]interface{}{}) gob.Register([]interface{}(nil)) gob.Register([]map[string]interface{}{}) if err := gob.NewEncoder(&buf).Encode(src); err != nil { return err } return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst) } ``` ### 方法二 json 序列化后反序列化 ```go func MapDeepCopy(src, dst interface{}) error { byteSlice, err := json.Marshal(src) if err != nil { return err } return json.Unmarshal(byteSlice, dst) } ``` ### 方法三 循环遍历 ```go func DeepCopy(value interface{}) interface{} { if valueMap, ok := value.(map[string]interface{}); ok { newMap := make(map[string]interface{}) for k, v := range valueMap { newMap[k] = DeepCopy(v) } return newMap } else if valueSlice, ok := value.([]interface{}); ok { newSlice := make([]interface{}, len(valueSlice)) for k, v := range valueSlice { newSlice[k] = DeepCopy(v) } return newSlice } return value } ```