给出一个结构:
type Foo struct {
Bar int
}
选项1 ,地图的密钥:struct value
map[Foo]bool
选项2 ,地图的密钥:pointer to struct
map[*Foo]bool
是否会出现必须选择选项2 的情况?即:
一般情况下,将地图的密钥设为pointer to struct
是否合理的用例是什么?
答案 0 :(得分:1)
对于那种特定情况,指针不会真正起作用,因为例如:
func main() {
m1, m2 := map[Vertex]int{}, map[*Vertex]int{}
a, b := Vertex{10}, Vertex{10}
m1[a], m2[&a] = 10, 10
fmt.Println(m1[a], m1[b], m1[a] == m1[b])
fmt.Println(m2[&a], m2[&b], m2[&a] == m2[&b])
fmt.Printf("%p %p", &a, &b)
}
//编辑问题后编辑
使用指针的唯一理由是结构的内容不具有可比性(也就是有切片或地图等),或者如果它太大而无法按值使用它导致性能问题。
恕我直言,你当前的情况应该是使用一个值而不是一个指针。