Pesanan Tugasan dalam Peta Go
Pertimbangkan kod Go berikut:
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) }
Outputnya ialah:
{40.68433 74.39967} map[Bell Labs:{40.68433 74.39967} test:{12 100}]
Walau bagaimanapun, jika perubahan kecil dibuat pada pengisytiharan puncak ujian, dengan menggerakkan pendakap kerinting penutup empat ruang ke kanan:
m["test"] = Vertex{ 12.0, 100, }
Output berubah kepada:
{40.68433 74.39967} map[test:{12 100} Bell Labs:{40.68433 74.39967}]
Timbul persoalan: Mengapa sedikit pengubahsuaian ini menjejaskan susunan peta?
Jawapan:
Tertib peta dalam Go bergantung pada fungsi cincang asas yang digunakan. Fungsi cincang ini rawak untuk mengurangkan serangan penafian perkhidmatan yang mengeksploitasi perlanggaran cincang. Rujuk kepada penjejak isu berikut untuk mendapatkan maklumat lanjut:
http://code.google.com/p/go/issues/detail?id=2630
Adalah penting untuk ambil perhatian bahawa susunan peta tidak dijamin oleh spesifikasi bahasa. Walaupun pelaksanaan Go semasa mengekalkan susunan yang stabil, semakan masa hadapan mungkin padat peta semasa pengumpulan sampah atau operasi lain, yang berpotensi mengubah susunan tanpa pengubahsuaian eksplisit peta mengikut kod. Oleh itu, bergantung pada susunan khusus untuk peta adalah tidak digalakkan.
Seperti yang dinyatakan dalam spesifikasi Go:
Peta ialah kumpulan tidak tertib bagi elemen satu jenis , dipanggil jenis elemen, diindeks oleh set kunci unik jenis lain, dipanggil jenis kunci.
Atas ialah kandungan terperinci Mengapakah Menukar Inden dalam Tugasan Go Map Mempengaruhi Susunan Output?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!