Maison  >  Article  >  développement back-end  >  Pourquoi la modification du formatage de la valeur d'une Go Map affecte-t-elle l'ordre de sortie de ses clés ?

Pourquoi la modification du formatage de la valeur d'une Go Map affecte-t-elle l'ordre de sortie de ses clés ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-26 19:00:13770parcourir

Why Does Changing the Formatting of a Go Map's Value Affect the Output Order of its Keys?

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!

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