In Go, you cannot directly use structs as keys in a map because the equality and ordering of structs is not predefined. However, you can create a workaround by converting the struct into a string or using another type as a key.
Here is an example of using structs with a string key:
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
people := map[string]Person{}
p1 := Person{"Alice", 25}
people[getKey(p1)] = p1
p2 := Person{"Bob", 30}
people[getKey(p2)] = p2
p3 := Person{"Alice", 25}
people[getKey(p3)] = p3
// Iterate over map keys
keys := make([]string, 0, len(people))
for k := range people {
keys = append(keys, k)
}
sort.Strings(keys)
// Print map values
for _, k := range keys {
fmt.Println(people[k])
}
}
// getKey creates a unique identifier for the Person struct
func getKey(p Person) string {
return fmt.Sprintf("%s:%d", p.Name, p.Age)
}
In this example, the Person
struct is converted into a unique string using the getKey
function, which combines the Name
and Age
fields. This string is used as the key in the people
map.
Note that you should create a unique key for each struct value, or it will overwrite the previous entry with the same key.
Alternatively, you can use a different type, such as an integer or another struct, as the key in the map, depending on your requirements. Just ensure that the chosen key type has predefined equality and ordering functions.