Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengulangi Kesatuan Kepingan dalam Fungsi Go Generik Tanpa Jenis Teras?

Bagaimanakah Saya Boleh Mengulangi Kesatuan Kepingan dalam Fungsi Go Generik Tanpa Jenis Teras?

Mary-Kate Olsen
Lepaskan: 2024-12-23 15:23:10
asal
676 orang telah melayarinya

How Can I Iterate Over a Union of Slices in a Go Generic Function Without a Core Type?

Lelaran Melalui Kesatuan Kepingan dalam Fungsi Generik Tanpa Jenis Teras

Dalam Go 1.18, fungsi generik membolehkan kita bekerja dengan jenis secara dinamik. Walau bagaimanapun, menghadapi cabaran dalam mengulang kepingan yang terdiri daripada pelbagai jenis memerlukan pertimbangan tambahan.

Apabila menangani kekangan jenis, kita mesti memahami konsep jenis teras. Jenis teras wujud apabila satu jenis asas wujud untuk semua jenis dalam antara muka atau apabila semua saluran mempunyai jenis elemen dan arah yang sama.

Dalam contoh kod awal:

type NumberSlice interface {
    []int64 | []float64
}
Salin selepas log masuk

The kekangan antara muka NumberSlice tidak mempunyai jenis teras kerana ia terdiri daripada berbilang jenis asas: []int64 dan []float64. Ini bermakna kita tidak boleh menjangkau hirisan antara muka ini.

Untuk mengatasi halangan ini, kita boleh mengubah suai antara muka untuk memerlukan jenis asas sebaliknya:

type Number interface {
    int64 | float64
}

func add[N Number](n []N) {
    for _, v := range n {
        fmt.Println(v)
    }
}
Salin selepas log masuk

Ini membolehkan kami mengisytiharkan kepingan int64 atau float64 dan lelaran di atasnya dalam fungsi generik.

Sebagai alternatif, kita boleh menentukan antara muka yang lebih jelas dengan jenis teras:

type NumberSlice[N int64 | float64] interface {
    ~[]N
}

func add[S NumberSlice[N], N int64 | float64](n S) {
    for _, v := range n {
        fmt.Println(v)
    }
}
Salin selepas log masuk

Pendekatan ini memastikan antara muka mempunyai jenis asas yang diketahui iaitu []N untuk semua jenis yang melaksanakan NumberSlice[N].

Dengan membuat pelarasan ini, kami berjaya mengulangi atas kesatuan hirisan dalam fungsi generik, memberikan peningkatan fleksibiliti dalam kod kami.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulangi Kesatuan Kepingan dalam Fungsi Go Generik Tanpa Jenis Teras?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan