Jak Go obliczyć skrót dla kluczy na mapie? Czy jest naprawdę wyjątkowy i czy jest dostępny do użytku w innych strukturach?Jak można obliczyć wartość skrótu dla kluczy na mapie?
Wyobrażam sobie, że jest to łatwe dla prymitywnych klawiszy, takich jak int
lub niezmienny string
, ale wydaje się nietrywialne dla struktur kompozytowych.
W jaki sposób powstają haszowniki? Czy zawiera on strukturę treści jako jedną liniową porcję pamięci? A co ze strunami? Czy zawiera on dane ciągów lub wewnętrzną reprezentację struktury, która jest wskaźnikiem i długością? Czy skrót dwóch ciągów, które przechowują tę samą sekwencję bajtów, ale w innej lokalizacji skutkuje równymi lub nierównoległymi skrótami? – thomasrutter
@thomasrutter jeśli dwie rzeczy porównywane są z '==' muszą mieć równe skróty (lub mapy nie działałyby ... to jest również uzasadnienie wszystkich specjalnych przypadków, które opisałem powyżej). Oznacza to, że struny zawierają ich ciała, a nie ich nagłówki. Struktury tworzą skróty wszystkich ich pól. Nie mogę znaleźć kodu faktycznie implementującego to, ale testy i [zasady porównania] (https://golang.org/ref/spec#Comparison_operators) wyjaśniają to. – hobbs
Dzięki za link – thomasrutter