Go中slice、map深度拷贝

Go中基本类型的参数传递一般是值传递,不会改变原来的参数值,但是slice、map中不是这样,slice、map中传递了引用。
所以用到深度拷贝的时候,只能遍历一个一个的赋值。下面提供一个slice和map组合的深度拷贝的方法

func Copy(value interface{}) interface{} {
    if valueMap, ok := value.(map[string]interface{}); ok {
        newMap := make(map[string]interface{})
        for k, v := range valueMap {
            newMap[k] = Copy(v)
        }

        return newMap
    } else if valueSlice, ok := value.([]interface{}); ok {
        newSlice := make([]interface{}, len(valueSlice))
        for k, v := range valueSlice {
            newSlice[k] = Copy(v)
        }

        return newSlice
    }

    return value
}

你可能感兴趣的:(Go中slice、map深度拷贝)