Как работает golang map of struct как keytype? - PullRequest
0 голосов
/ 17 мая 2018

Я не знаю, почему Го дал следующий результат.Я думаю, что a1 и a2 - два разных указателя?

& {}!

Код

func main() {
    a1 := &A{}
    a2 := &A{}
    a3 := &A{}
    m2 := make(map[*A]string)
    m2[a1] = "hello"
    m2[a2] = "world"
    m2[a3] = "!"
    for k, v := range m2 {
        fmt.Println(k, v)
    }
}

type A struct {
}

Ответы [ 2 ]

0 голосов
/ 17 мая 2018
func main() {
a1 := new(A)
a2 := new(A)//A{}
a3 := new(A)//A{}
m2 := make(map[**A]string)
m2[&a1] = "hello"
m2[&a2] = "world"
m2[&a3] = "!"
for k, v := range m2 {
    fmt.Println(k, v)
}
}

type A struct {
}

Приведенный выше код печатает то, что вам нужно

0 голосов
/ 17 мая 2018

Спецификация языка говорит :

Указатели на различные переменные нулевого размера могут или не могут быть равными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...