Maison > développement back-end > Golang > Pourquoi la sortie de carte de Go semble-t-elle ordonnée alors que les cartes ne sont pas ordonnées ?

Pourquoi la sortie de carte de Go semble-t-elle ordonnée alors que les cartes ne sont pas ordonnées ?

Mary-Kate Olsen
Libérer: 2024-12-01 13:43:11
original
107 Les gens l'ont consulté

Why Does Go's Map Output Seem Ordered Despite Maps Being Unordered?

Ordre d'affectation dans les cartes

Dans Go, les cartes sont des collections non ordonnées de paires clé-valeur. Cependant, le résultat de l'extrait de code suivant semble suggérer un ordre pour les paires clé-valeur :

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

Lorsque l'extrait de code ci-dessus est exécuté, il génère :

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

Cependant, si l'espace autour de l'accolade droite dans l'affectation de la touche "test" est modifié, la sortie changements :

m["test"] = Vertex{
    12.0, 100,
}
Copier après la connexion

Avec cette modification, le résultat devient :

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

Explication

Le comportement observé est dû à la randomisation de Fonction de hachage de carte de Go. Cette randomisation est mise en œuvre pour empêcher les attaques par déni de service qui exploitent les collisions de hachage. Comme indiqué dans le suivi des problèmes Go :

http://code.google.com/p/go/issues/detail?id=2630
Copier après la connexion

L'ordre des cartes n'est pas garanti dans Go. Bien que les implémentations actuelles ne réorganisent pas explicitement les cartes, les implémentations futures pourraient compacter les cartes lors du GC ou d'autres opérations, affectant potentiellement l'ordre. Par conséquent, il n'est pas judicieux de se fier à l'ordre des cartes dans votre code.

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