Structures en tant que clés dans les cartes Go
J'étais à la recherche en utilisant les structures comme clés dans golang cartes. Un champ de cette structure est censé être une carte aussi et cela semble aller à l'encontre de la documentation fournie ici qui dit que seules les structures qui ont des champs qui peuvent être comparées avec ==
et !=
peut être dans les domaines des structures qui sont utilisées comme clés dans les cartes. J'ai tout de même allé de l'avant pour essayer le suivant:
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
}
La sortie a été:
Hello, 世界
obi$56
testing map[obi:0.003] go home
testing2 map[obi:0.003] come home
Cela semble aller à l'encontre de la documentation comme un champ dans la structure utilisée comme une clé est une carte. Que dois-je, semblent aller de mal?
source d'informationauteur cobie | 2014-01-11
Vous devez vous connecter pour publier un commentaire.
Dans votre exemple de la carte de clé est un pointeur vers une struct, pas la structure elle-même. Les pointeurs peuvent être comparés pour l'égalité, même lorsque les éléments qu'ils point à ne peuvent pas être comparés. Cette comparaison n'est pas basé sur le contenu de l'article, mais seulement sur son adresse de mémoire.