Map的键作为struct的指针? (用例)

时间:2016-05-09 00:45:27

标签: pointers go

给出一个结构:

type Foo struct {
    Bar int
}  

选项1 ,地图的密钥:struct value

map[Foo]bool 

选项2 ,地图的密钥:pointer to struct

map[*Foo]bool

是否会出现必须选择选项2 的情况?即:

  1. 记忆效率?
  2. 巨大的结构价值?
  3. 一般情况下,将地图的密钥设为pointer to struct是否合理的用例是什么?

1 个答案:

答案 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)
}

playground

//编辑问题后编辑

使用指针的唯一理由是结构的内容不具有可比性(也就是有切片或地图等),或者如果它太大而无法按值使用它导致性能问题。

恕我直言,你当前的情况应该是使用一个值而不是一个指针。