맵의 할당 순서
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) }
위 코드 조각이 실행되면 다음이 출력됩니다.
{40.68433 74.39967} map[Bell Labs:{40.68433 74.39967} test:{12 100}]
그러나 "test" 키 할당에서 오른쪽 중괄호 주위의 공백이 수정되면 출력은 변경 사항:
m["test"] = Vertex{ 12.0, 100, }
이 수정을 통해 출력은 다음과 같습니다.
{40.68433 74.39967} map[test:{12 100} Bell Labs:{40.68433 74.39967}]
설명
관찰된 동작은 Go의 지도 해시 함수. 이 무작위화는 해시 충돌을 이용하는 서비스 거부 공격을 방지하기 위해 구현됩니다. Go 이슈 추적기에 명시된 바와 같이:
http://code.google.com/p/go/issues/detail?id=2630
Go에서는 지도 순서가 보장되지 않습니다. 현재 구현에서는 맵을 명시적으로 재정렬하지 않지만 향후 구현에서는 GC 또는 기타 작업 중에 맵을 압축하여 순서에 영향을 미칠 수 있습니다. 따라서 코드에서 지도 순서에 의존하는 것은 현명하지 않습니다.
위 내용은 지도가 정렬되지 않았음에도 불구하고 Go의 지도 출력이 정렬된 것처럼 보이는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!