> 백엔드 개발 > Golang > 지도가 정렬되지 않았음에도 불구하고 Go의 지도 출력이 정렬된 것처럼 보이는 이유는 무엇입니까?

지도가 정렬되지 않았음에도 불구하고 Go의 지도 출력이 정렬된 것처럼 보이는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-01 13:43:11
원래의
110명이 탐색했습니다.

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

맵의 할당 순서

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿