Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengendalikan Peta dengan Jenis Nilai Berbeza Tetapi Jenis Kekunci Yang Sama dalam Go?

Bagaimanakah Saya Boleh Mengendalikan Peta dengan Jenis Nilai Berbeza Tetapi Jenis Kekunci Yang Sama dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 04:15:10922semak imbas

How Can I Handle Maps with Different Value Types But the Same Key Type in Go?

Mengatasi Percanggahan Jenis dalam Pengendalian Peta

Masalah:
Apabila bekerja dengan peta dalam Go, selalunya diingini untuk menggunakan kekunci jenis yang sama tetapi nilai yang berbeza jenis. Walau bagaimanapun, terdapat kekangan apabila cuba mencipta fungsi yang mengambil jenis kunci dengan antara muka{} sebagai jenis nilai.

Pendekatan Gagal:

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
}

Kod di atas tidak akan disusun kerana jenis tidak sepadan. Peta dalam Go bukan kovarian, bermakna mereka tidak boleh menerima jenis nilai yang berbeza dengan jenis kunci yang sama.

Penyelesaian:

Walaupun tiada penyelesaian yang elegan untuk isu ini dalam Had yang wujud Go, terdapat penyelesaian menggunakan pantulan:

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

Kod ini mengambil nilai antara muka{} dan menggunakan pantulan untuk tentukan sama ada ia adalah peta. Jika ya, ia mengekstrak dan mencetak kekunci untuk peta itu.

Nota:

Adalah penting untuk mengambil kira had penggunaan refleksi, kerana ia boleh memperkenalkan overhed dan kerumitan prestasi masa jalan. Jika boleh, menggunakan jenis peta khusus untuk jenis nilai tertentu kekal sebagai pendekatan pilihan untuk prestasi dan kebolehselenggaraan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Peta dengan Jenis Nilai Berbeza Tetapi Jenis Kekunci Yang Sama dalam Go?. 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