Rumah >pembangunan bahagian belakang >Golang >Mengapa Keluaran Peta Go Nampak Tersusun Walaupun Peta Tidak Tersusun?

Mengapa Keluaran Peta Go Nampak Tersusun Walaupun Peta Tidak Tersusun?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 13:43:11113semak imbas

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

Turutan Tugasan dalam Peta

Dalam Go, peta ialah koleksi tidak tertib pasangan nilai kunci. Walau bagaimanapun, output coretan kod berikut nampaknya mencadangkan susunan kepada pasangan nilai kunci:

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)
}

Apabila coretan kod di atas dilaksanakan, ia mengeluarkan:

{40.68433 74.39967}
map[Bell Labs:{40.68433 74.39967} test:{12 100}]

Walau bagaimanapun, jika ruang putih di sekeliling pendakap kerinting kanan dalam tugasan kekunci "ujian" diubah suai, output perubahan:

m["test"] = Vertex{
    12.0, 100,
}

Dengan pengubahsuaian ini, output menjadi:

{40.68433 74.39967}
map[test:{12 100} Bell Labs:{40.68433 74.39967}]

Penjelasan

Tingkah laku yang diperhatikan adalah disebabkan oleh rawak Fungsi cincang peta Go. Rawak ini dilaksanakan untuk mengelakkan serangan penafian perkhidmatan yang mengeksploitasi perlanggaran cincang. Seperti yang dinyatakan dalam penjejak isu Go:

http://code.google.com/p/go/issues/detail?id=2630

Pesanan peta tidak dijamin dalam Go. Walaupun pelaksanaan semasa tidak menyusun semula peta secara eksplisit, pelaksanaan masa hadapan mungkin padat peta semasa GC atau operasi lain, yang berpotensi menjejaskan pesanan. Oleh itu, adalah tidak bijak untuk bergantung pada susunan peta dalam kod anda.

Atas ialah kandungan terperinci Mengapa Keluaran Peta Go Nampak Tersusun Walaupun Peta Tidak Tersusun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn