Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengulangi Kepingan Kesatuan dalam Go Generics dan Menyelesaikan Ralat 'T tidak mempunyai jenis teras'?

Bagaimana untuk Mengulangi Kepingan Kesatuan dalam Go Generics dan Menyelesaikan Ralat 'T tidak mempunyai jenis teras'?

Barbara Streisand
Lepaskan: 2024-12-21 16:30:11
asal
605 orang telah melayarinya

How to Iterate Over Union Slices in Go Generics and Solve the

Menyingkap Lelaran Generik ke atas Kepingan Kesatuan (Menyelesaikan "T tidak mempunyai jenis teras")

Penerokaan generik Go diteruskan, kali ini menyelidiki menjadi cabaran yang menarik: mengulangi gabungan kepingan. Matlamat kami adalah untuk mencipta fungsi generik yang boleh mengendalikan kedua-dua hirisan integer dan hirisan apungan, kemudian jumlah kandungannya.

Percubaan awal kami menghadapi halangan:

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

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

Kami menerima ralat "tidak boleh berjulat melebihi n (pembolehubah jenis N dikekang oleh NumberSlice) (N tidak mempunyai jenis teras)." Ralat ini berpunca daripada kekurangan jenis teras untuk kekangan antara muka generik.

Memahami jenis teras adalah penting. Jenis teras wujud apabila set jenis antara muka mempunyai satu jenis asas atau hanya terdiri daripada jenis saluran dengan jenis elemen yang sama dan saluran arah dengan arah yang sama. Malangnya, kekangan antara muka kami tidak memenuhi syarat ini kerana dua jenis asasnya, []int64 dan []float64.

Untuk menyelesaikan isu ini, kami boleh mentakrifkan semula antara muka kami untuk memerlukan jenis asas dan lulus hirisan jenis asas sebagai hujah fungsi:

type Number interface {
    int64 | float64
}

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

Sebagai alternatif, kita boleh menggunakan pendekatan yang lebih verbose dengan jenis NumberSlice khusus parameter:

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

Dengan menggunakan teknik ini, kami boleh mengulangi hirisan kesatuan dengan berkesan dan melaksanakan operasi yang diingini dalam fungsi generik kami.

Atas ialah kandungan terperinci Bagaimana untuk Mengulangi Kepingan Kesatuan dalam Go Generics dan Menyelesaikan Ralat 'T tidak mempunyai jenis teras'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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