GeekBits

Copy a Map in Go

Learn all the various methods and techniques that you can use to copy a map in Go.

2 min read
Copy a Map in Go

In Go, a map refers to a built-in data structure that stores key-value pairs. It provides an efficient way to store and retrieve data based on a unique key. Maps are widely used in Go for tasks such as caching, data indexing, and implementing associative arrays.

Copying a map in Go is a common operation when you need to create a new map with the same data as an existing one, without modifying the original map.

Basics of a Map in Go

Declaring a Map

To declare a map in Go, you use the make function or a shorthand syntax. Here's how you declare a map:

// Using make
myMap := make(map[string]int)
myMap := map[string]int{}

In the above code, we declare a map myMap with string keys and integer values.

Adding and Accessing Values

You can add key-value pairs to a map using the assignment operator and access values by providing the key:

myMap["one"] = 1
myMap["two"] = 2

value := myMap["one"] // value will be 1

Checking for Key Existence

To check if a key exists in a map, you can use a two-value assignment:

value, exists := myMap["three"]
if exists {
    // Key exists, value contains the value
} else {
    // Key doesn't exist
}

Copying a Map in Go

Now, let's explore various methods to copy a map in Go.

Method 1 - Using a Loop

One way to copy a map is to iterate through the original map and create a new map with the same key-value pairs. Here's how you can do it:

originalMap := map[string]int{"one": 1, "two": 2}
newMap := make(map[string]int)

for key, value := range originalMap {
    newMap[key] = value
}

In the code above, we declare an originalMap, iterate through it, and copy its elements to a newMap.

Method 2 - Using a Constructor Function

Go doesn't provide a built-in copy function for maps, but you can use a constructor function to achieve the same result:

func copyMap(original map[string]int) map[string]int {
    newMap := make(map[string]int)
    for key, value := range original {
        newMap[key] = value
    }
    return newMap
}

originalMap := map[string]int{"one": 1, "two": 2}
newMap := copyMap(originalMap)

In this code, we define a copyMap function that takes the original map as a parameter and returns a new map containing the same key-value pairs.

Method 3 - Using a Map Literal

Another method to copy a map is by using a map literal when declaring a new map:

originalMap := map[string]int{"one": 1, "two": 2}
newMap := map[string]int{}


for key, value := range originalMap {
    newMap[key] = value
}

This method combines the declaration and copying steps into a single operation. Note that this approach is suitable when you want to create a new map with the same initial values as an existing map.

Method 4 - Using a Type Assertion

If you want to copy a map and change its type, you can use a type assertion:

originalMap := map[string]interface{}{"one": 1, "two": "2"}
newMap := make(map[string]int)

for key, value := range originalMap {
    if intValue, ok := value.(int); ok {
        newMap[key] = intValue
    }
}

In this example, we copy the originalMap, which contains mixed types, and create a new map with only integer values.

Conclusion

This covers various methods and techniques we can use to copy a map in the go programming language.

Sign up for our newsletter

Don't miss anything. Get all the latest posts delivered to your inbox. No spam!