Структуры как ключи в картах Go

Я изучал использование структур в виде ключей на картах голанга. Поле в этой структуре также должно быть картой, и это, похоже, противоречит документации здесь, в которой говорится, что только структуры, у которых есть поля, которые можно сравнить с ==, а != может быть в полях структур, которые используются в качестве ключей на картах. Однако я попытался сделать следующее:

package main

import "fmt"
import "strings"

func main() {
    fmt.Println("Hello, 世界")
    fmt.Println(strings.Join([]string{"obi", "$", "56"}, ""))
    z := make(map[string]float64)

    z["obi"] = 0.003

    x := &test{
        name:"testing",
        code:z,
    }

    a := &test{
        name:"testing2",
        code:z,
    }

    y := make(map[*test] string)

    y[x] = "go home"
    y[a] = "come home"

    for key, val := range y{
        fmt.Println(key.name, key.code, val)
    }

}

type test struct{
    name string
    code map[string]float64
}

Выход был:

Hello, 世界
obi$56
testing map[obi:0.003] go home
testing2 map[obi:0.003] come home

Это, похоже, противоречит документации, поскольку поле в структуре, используемой в качестве ключа, представляет собой карту. Что я, кажется, ошибаюсь?

Ответы

Ответ 1

В вашем примере ключ карты является указателем на структуру, а не самой структурой. Указатели можно сравнить для равенства, даже если элементы, на которые они указывают, не могут сравниться. Это сравнение не основано на содержимом элемента, а только на его адресе памяти.