Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengakses Kekunci Peta dalam Go Tanpa mengira Jenis Nilai?

Bagaimanakah Saya Boleh Mengakses Kekunci Peta dalam Go Tanpa mengira Jenis Nilai?

Barbara Streisand
Barbara Streisandasal
2025-01-01 07:35:10900semak imbas

How Can I Access Map Keys in Go Regardless of Value Type?

Bekerja dengan Peta dengan Jenis Nilai Berbeza

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.

Cabaran Kovarian

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.

Kurang Elegan, Tetapi Penyelesaian Berfungsi

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!

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