Maison > développement back-end > Golang > le corps du texte

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

Patricia Arquette
Libérer: 2024-11-21 05:38:11
original
175 Les gens l'ont consulté

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)
}
Copier après la connexion

Le résultat est :

{40.68433 74.39967}
map[Bell Labs:{40.68433 74.39967} test:{12 100}]
Copier après la connexion

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,
}
Copier après la connexion

Le résultat devient :

{40.68433 74.39967}
map[test:{12 100} Bell Labs:{40.68433 74.39967}]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal