Ordre d'affectation dans Go Maps
Considérant 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) }
Il génère :
{40.68433 74.39967} map[Bell Labs:{40.68433 74.39967} test:{12 100}]
Modifier la déclaration du sommet de test en déplaçant le "}" droit de 4 espaces, comme suit :
m["test"] = Vertex{ 12.0, 100, }
Modifie la sortie en :
{40.68433 74.39967} map[test:{12 100} Bell Labs:{40.68433 74.39967}]
Explication :
L'"ordre" de la carte dans Go dépend du hachage aléatoire fonction utilisée pour empêcher les attaques par déni de service. Selon le suivi des problèmes Go (http://code.google.com/p/go/issues/detail?id=2630), l'ordre des cartes n'est pas garanti selon les spécifications.
Selon les spécifications , une carte est un groupe non ordonné d'éléments avec des clés uniques. Une implémentation future pourrait changer l'ordre d'une carte sans la modifier dans votre code. Par conséquent, s’appuyer sur un ordre spécifique des cartes n’est pas une pratique recommandée dans Go.
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!