Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menggunakan generik dengan jenis tersuai?

Bagaimana untuk menggunakan generik dengan jenis tersuai?

王林
王林ke hadapan
2024-02-09 15:50:091159semak imbas

Bagaimana untuk menggunakan generik dengan jenis tersuai?

editor php Baicao memperkenalkan anda cara menggunakan generik dan jenis tersuai bersama-sama. Generik ialah teknik yang biasa digunakan dalam pengaturcaraan untuk menjadikan kod lebih fleksibel dan boleh digunakan semula. Jenis tersuai ialah jenis data yang ditakrifkan oleh pembangun sendiri berdasarkan keperluan perniagaan. Apabila kita perlu menggunakan generik dalam jenis tersuai, kita boleh melakukannya melalui kelas generik atau antara muka generik. Dengan menggunakan jenis generik dan tersuai secara rasional, kami boleh meningkatkan kebolehselenggaraan dan kebolehskalaan kod dengan lebih baik. Dalam artikel berikut, kami akan memperincikan kaedah dan pertimbangan khusus untuk menggunakan generik dengan jenis tersuai.

Kandungan soalan

Saya benar-benar keliru tentang bagaimana peraturan generik berfungsi. Saya hanya mahu fungsi menerima pelbagai jenis tersuai dan mempunyai logik yang berbeza untuk setiap jenis.

type myObjOne struct {
    myfield        string
}

type myObjTwo struct {
    myObjTwo
    myOtherField   string
}

type Generic interface {
    myObjOne | myObjTwo
}

func derp[T Generic](c T) {
    switch any(c).(type) {
    case myObjOne:
        // I can't access the fields of my types like this
        c.myfield = "sdfsfsdfdsf"
    case myObjTwo:
        c.myOtherField = "sdfsfsdfdsf"
    }
    return
}

Mengapa c.myfield membuang c.myfield undefined (jenis T tidak mempunyai medan atau kaedah myfield) compilerMissingFieldOrMethod? c.myfield 抛出 c.myfield 未定义(类型 T 没有字段或方法 myfield)compilerMissingFieldOrMethod

解决方法

c 是类型 T

Penyelesaian

ccc adalah daripada jenis T, bukan hasil penegasan jenis. Dibetulkan dengan memberikan hasil penegasan jenis kepada pembolehubah.

func derp[T Generic](c T) {
    switch c := any(c).(type) {
    case myObjOne:
        // I can't access the fields of my types like this
        c.myfield = "sdfsfsdfdsf"
    case myObjTwo:
        c.myOtherField = "sdfsfsdfdsf"
    }
    return
}
🎜Kod ini mengisytiharkan pembolehubah kedua dalam suis jenis 🎜 yang jenisnya bergantung pada cawangan suis. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan generik dengan jenis tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam