gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/mapx/clone.go (about)

     1  package mapx
     2  
     3  func CloneMap(a map[string]interface{}) (r map[string]interface{}) {
     4  	if a == nil {
     5  		return
     6  	}
     7  	r = map[string]interface{}{}
     8  	for key, val := range a {
     9  		r[key] = CloneAny(val)
    10  	}
    11  
    12  	return r
    13  }
    14  
    15  func CloneArray(a []interface{}) (r []interface{}) {
    16  	r = make([]interface{}, len(a), cap(a))
    17  	for i, val := range a {
    18  		r[i] = CloneAny(val)
    19  	}
    20  	return
    21  }
    22  
    23  func CloneAny(a interface{}) (r interface{}) {
    24  	switch v := a.(type) {
    25  	case map[string]interface{}:
    26  		r = CloneMap(v)
    27  	case []interface{}:
    28  		r = CloneArray(v)
    29  	default:
    30  		r = a
    31  	}
    32  	return
    33  }