Learn how to copy maps in Go. Includes examples of efficient map copying techniques.
last modified April 20, 2025
This tutorial explains how to use the maps.Copy function in Go. We’ll cover map copying operations with practical examples.
The maps.Copy function copies all key-value pairs from one map to another. It’s part of Go’s experimental maps package.
This function is useful for duplicating map data or merging maps. It handles overwriting existing keys in the destination map.
The simplest use of maps.Copy copies all elements from one map to another. Both maps must have the same key and value types.
basic_copy.go
package main
import ( “fmt” “maps” )
func main() { src := map[string]int{“a”: 1, “b”: 2} dst := make(map[string]int)
maps.Copy(dst, src)
fmt.Println("Copied map:", dst)
}
We create a source map and an empty destination map. After copying, the destination contains all key-value pairs from the source.
maps.Copy overwrites existing keys in the destination map. This example demonstrates this behavior.
overwrite_keys.go
package main
import ( “fmt” “maps” )
func main() { src := map[string]int{“a”: 1, “b”: 2} dst := map[string]int{“a”: 5, “c”: 3}
maps.Copy(dst, src)
fmt.Println("Result after copy:", dst)
}
The destination map’s “a” key gets overwritten with the source value. The “b” key is added, and “c” remains unchanged.
We can copy between maps with different underlying types if they’re compatible. This example copies from map[int]string to map[int]string.
different_types.go
package main
import ( “fmt” “maps” )
func main() { src := map[int]string{1: “one”, 2: “two”} dst := make(map[int]string)
maps.Copy(dst, src)
fmt.Println("Copied map:", dst)
}
The function works with any map types as long as key and value types match. The destination map receives all elements from the source.
maps.Copy handles nil maps gracefully. This example shows behavior with nil source and destination maps.
nil_maps.go
package main
import ( “fmt” “maps” )
func main() { var src map[string]int dst := make(map[string]int)
// Copy from nil map
maps.Copy(dst, src)
fmt.Println("Copy from nil:", dst)
// Copy to nil map
src = map[string]int{"a": 1}
var nilDst map[string]int
maps.Copy(nilDst, src)
fmt.Println("Copy to nil:", nilDst)
}
Copying from a nil source does nothing. Copying to a nil destination causes a panic, similar to regular map operations.
maps.Copy efficiently handles large maps. This example benchmarks copying performance.
large_maps.go
package main
import ( “fmt” “maps” “time” )
func main() { largeMap := make(map[int]int, 1_000_000) for i := 0; i < 1_000_000; i++ { largeMap[i] = i * 2 }
dst := make(map[int]int, len(largeMap))
start := time.Now()
maps.Copy(dst, largeMap)
elapsed := time.Since(start)
fmt.Printf("Copied 1,000,000 elements in %v\n", elapsed)
fmt.Println("Sample values:", dst[0], dst[999999])
}
The function efficiently copies all elements while maintaining map performance. Preallocating the destination map improves copy speed.
maps.Copy works with maps containing struct values. This example demonstrates copying complex value types.
struct_values.go
package main
import ( “fmt” “maps” )
type Person struct { Name string Age int }
func main() { src := map[string]Person{ “alice”: {“Alice”, 30}, “bob”: {“Bob”, 25}, }
dst := make(map[string]Person)
maps.Copy(dst, src)
fmt.Println("Copied people:", dst)
}
The function performs a shallow copy of struct values. Both maps will contain the same Person values after copying.
This practical example shows how to merge configuration maps using maps.Copy.
merge_configs.go
package main
import ( “fmt” “maps” )
func main() { defaultConfig := map[string]string{ “theme”: “dark”, “lang”: “en”, “cache”: “true”, }
userConfig := map[string]string{
"theme": "light",
"proxy": "localhost:8080",
}
// Merge user config over defaults
maps.Copy(defaultConfig, userConfig)
fmt.Println("Merged configuration:")
for k, v := range defaultConfig {
fmt.Printf("%s: %s\n", k, v)
}
}
User preferences override default values while preserving unspecified settings. This pattern is common in application configuration systems.
Go experimental maps package documentation
This tutorial covered the maps.Copy function in Go with practical examples of copying and merging maps in various scenarios.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all Go tutorials.