Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Kami Boleh Melaksanakan Sama ada Jenis dalam Go, Memandangkan Had Generik dalam Kaedah Antara Muka?

Bagaimanakah Kami Boleh Melaksanakan Sama ada Jenis dalam Go, Memandangkan Had Generik dalam Kaedah Antara Muka?

DDD
Lepaskan: 2024-12-14 03:43:09
asal
267 orang telah melayarinya

How Can We Implement an Either Type in Go, Given the Limitations of Generics in Interface Methods?

Melaksanakan Sama ada Jenis dalam Go: Menavigasi Sempadan Generik

Masalah dan Matlamat

Dengan generik kini menjadi sebahagian daripada Go 1.18, ramai pembangun telah menetapkan sasaran mereka untuk mencipta jenis yang mewakili konsep kompleks dengan tepat. Kes klasik ialah jenis 'Sama ada[A, B]', yang menyatakan kemungkinan nilai menjadi salah satu daripada dua jenis berbeza, A atau B.

Halangan Definisi Antara Muka

Dalam mentakrifkan antara muka untuk jenis 'Sama ada', halangan muncul disebabkan oleh had bahasa untuk tidak membenarkan parameter jenis dalam kaedah antara muka. Sekatan ini menghalang kami daripada menyatakan kaedah 'Tukar', yang mengembalikan jenis berbeza berdasarkan varian nilai.

Pelaksanaan Kreatif

Untuk mengatasi isu ini, seseorang boleh dapatkan inspirasi daripada bahasa pengaturcaraan berfungsi dan laksanakan jenis 'Pilihan' yang merangkumi keupayaan untuk mewakili sama ada nilai tertentu atau ketiadaan. Berdasarkan ini, kita boleh menentukan jenis 'Sama ada':

type Either[A, B any] interface {
    is_left() bool
    is_right() bool
    find_left() Optional[A]
    find_right() Optional[B]
}
Salin selepas log masuk

Daripada bergantung pada kaedah 'Tukar', pendekatan ini memanfaatkan kaedah 'is_left' dan 'is_right' untuk menentukan jenis terkandung nilai. Kaedah 'find_left' dan 'find_right' kemudian memberikan nilai 'Pilihan' untuk jenis yang sepadan.

Butiran dan Penggunaan Pelaksanaan

Di dalam 'Kiri' dan ' Jenis konkrit yang betul yang melaksanakan 'Sama ada,' kami mengurus muatan sebenar dan menyediakan bendera boolean yang diperlukan. Fungsi 'kiri' dan 'kanan' bertindak sebagai pembina, memudahkan instantiasi.

Penggunaan sampel menunjukkan cara bekerja dengan jenis 'Sama ada':

func main() {
    var e1 Either[int, string] = left[int, string](4143)
    var e2 Either[int, string] = right[int, string]("G4143")

    if e1.is_left() {
        if l, err := e1.find_left().get(); err == nil {
            fmt.Printf("The int is: %d\n", l)
        } else {
            fmt.Fprintln(os.Stderr, err)
        }
    }
}
Salin selepas log masuk

Kesimpulan

Walaupun batasan generik Go menimbulkan cabaran, anda boleh mengatasinya dan mencipta abstraksi yang kuat seperti jenis 'Sama ada'. Dengan memanfaatkan 'Pilihan' dan melaksanakan antara muka tersuai dengan kaedah pembantu, pembangun boleh memperoleh fleksibiliti dan ekspresif yang mereka cari dalam kod Go mereka.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Melaksanakan Sama ada Jenis dalam Go, Memandangkan Had Generik dalam Kaedah Antara Muka?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan