Skip to content

Instantly share code, notes, and snippets.

@cevaris
Last active October 20, 2023 03:18
Show Gist options
  • Save cevaris/24cc9da7b14731204c79 to your computer and use it in GitHub Desktop.
Save cevaris/24cc9da7b14731204c79 to your computer and use it in GitHub Desktop.
Golang: Using structs as key for Maps
package main
import "fmt"
type A struct {
a, b int
}
func MapStructValAsKey(){
// Notice: We are using value of `A`, not `*A`
m1 := make(map[A]string)
a1 := &A{0, 1}
m1[*a1] = "01"
a2 := &A{0, 1}
// Succeeds because map is hashing with
// the `struct` value
_, lookSucceed := m1[*a2]
fmt.Println(m1, lookSucceed)
}
func MapStructPointerAsKey(){
// Notice: We are using pointer of `*A`, not `A`
m1 := make(map[*A]string)
a1 := &A{0, 1}
m1[a1] = "01"
a2 := &A{0, 1}
// Fails because map is hashing with
// the `struct` memory address
_, lookSucceed := m1[a2]
fmt.Println(m1, lookSucceed)
}
func main() {
MapStructValAsKey()
MapStructPointerAsKey()
}
@mhewedy
Copy link

mhewedy commented Sep 27, 2019

You saved my day .... Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment