Pourquoi l'ordre d'attribution des touches de carte affecte-t-il la sortie dans Go ?
Étant donné le code Go :
package main import "fmt" type Vertex struct { Lat, Long float64 } var m map[string]Vertex func main() { m = make(map[string]Vertex) m["Bell Labs"] = Vertex{ 40.68433, 74.39967, } m["test"] = Vertex{ 12.0, 100, } fmt.Println(m["Bell Labs"]) fmt.Println(m) }
Lorsque nous exécutons ce code, il affichera :
{40.68433 74.39967} map[Bell Labs:{40.68433 74.39967} test:{12 100}]
Cependant, si nous déplaçons le bouclé droit accolade dans la déclaration du sommet de test quatre espaces vers la gauche, la sortie deviendra :
{40.68433 74.39967} map[test:{12 100} Bell Labs:{40.68433 74.39967}]
Cette modification apparemment mineure affecte l'ordre des clés de carte dans la sortie car "l'ordre" de la carte dépend de la fonction de hachage utilisée. Go utilise une fonction de hachage aléatoire pour empêcher les attaques par déni de service basées sur des collisions de hachage. Par conséquent, l'ordre de la carte n'est pas garanti et les modifications apportées aux paires clé-valeur peuvent modifier cet ordre.
La spécification de Go définit une carte comme un groupe non ordonné d'éléments avec des clés uniques. Il ne fournit aucune garantie d’une commande spécifique. Cette conception permet des optimisations qui pourraient potentiellement changer l'ordre des touches de carte sans aucune modification du code de l'utilisateur. Par conséquent, il n'est pas judicieux de se fier à l'ordre des touches de mappage dans vos applications.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!