Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengakses Kekunci Peta dalam Go Tanpa mengira Jenis Nilai?
Dalam Go, peta ialah struktur data serba boleh yang memetakan kunci kepada nilai tertentu. Walau bagaimanapun, situasi mungkin timbul apabila kami ingin menggunakan kekunci berbilang peta, walaupun jenis nilainya berbeza. Pertimbangkan coretan kod berikut:
func main() { mapOne := map[string]int mapTwo := map[string]double mapThree := map[string]SomeStruct useKeys(mapOne) } func useKeys(m map[string]interface{}) { // something with keys here }
Dalam contoh ini, kita mempunyai tiga peta: mapOne memegang integer, mapTwo menyimpan nilai berganda dan mapThree mengandungi tika SomeStruct. Matlamat kami adalah untuk mencipta fungsi useKeys yang menerima peta dengan kekunci rentetan dan jenis nilai arbitrari yang dilambangkan oleh antara muka{}. Walau bagaimanapun, reka bentuk ini tidak berfungsi seperti yang diharapkan.
Dalam Go, peta dan kepingan ialah struktur generik, tetapi ia tidak mempunyai kovarians. Ini menunjukkan bahawa walaupun anda boleh menetapkan peta[rentetan]int kepada pembolehubah jenis peta[rentetan]antara muka{}, anda tidak boleh mengubah suai nilai peta yang ditetapkan dengan selamat tanpa menyebabkan ralat.
Jika kita hanya perlu mendapatkan kunci peta tanpa mengira jenis nilainya, kita boleh menggunakan refleksi:
func useKeys(m interface{}) { v := reflect.ValueOf(m) if v.Kind() != reflect.Map { fmt.Println("not a map!") return } keys := v.MapKeys() fmt.Println(keys) }
Penyelesaian ini tidak seanggun yang kita mahukan, tetapi ia secara berkesan mengambil dan mencetak kekunci mana-mana peta yang dihantar kepadanya, tanpa mengira jenis nilai yang terkandung.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Kekunci Peta dalam Go Tanpa mengira Jenis Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!