Maison  >  Article  >  développement back-end  >  Pourquoi la modification de l'indentation dans les affectations Go Map affecte-t-elle l'ordre de sortie ?

Pourquoi la modification de l'indentation dans les affectations Go Map affecte-t-elle l'ordre de sortie ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-21 05:38:11177parcourir

Why Does Changing the Indentation in Go Map Assignments Affect the Output Order?

Ordre d'affectation dans Go Maps

Considérez le code Go suivant :

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

Le résultat est :

{40.68433 74.39967}
map[Bell Labs:{40.68433 74.39967} test:{12 100}]

Cependant, si une modification mineure est apportée à la déclaration du sommet de test, en déplaçant la fermeture accolade quatre espaces vers la droite :

m["test"] = Vertex{
    12.0, 100,
}

Le résultat devient :

{40.68433 74.39967}
map[test:{12 100} Bell Labs:{40.68433 74.39967}]

La question se pose : Pourquoi cette légère modification affecte-t-elle l'ordre de la carte ?

Réponse :

L'ordre d'une carte dans Go dépend de la fonction de hachage sous-jacente utilisée. Cette fonction de hachage est randomisée pour atténuer les attaques par déni de service qui exploitent les collisions de hachage. Reportez-vous à l'outil de suivi des problèmes suivant pour plus d'informations :

http://code.google.com/p/go/issues/detail?id=2630

Il est important de noter que l'ordre des cartes n’est pas garanti par la spécification du langage. Bien que les implémentations Go actuelles maintiennent un ordre stable, les révisions futures pourraient compacter les cartes lors du garbage collection ou d'autres opérations, modifiant potentiellement l'ordre sans la modification explicite de la carte par le code. Par conséquent, il est déconseillé de s'appuyer sur un ordre spécifique pour les cartes.

Comme indiqué dans la spécification Go :

Une carte est un groupe non ordonné d'éléments d'un même type. , appelé type d'élément, indexé par un ensemble de clés uniques d'un autre type, appelé type de clé.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn