Go Generics - Jenis Kekangan dan Kesatuan Dijelaskan
Dalam Go generik, kesatuan memainkan peranan khusus sebagai sebahagian daripada kekangan antara muka. Mari kita bongkarkan maksud ini dan bagaimana ia berkaitan dengan soalan anda tentang ujian dengan jenis yang berbeza.
Apakah Kesatuan?
Dalam kekangan jenis generik, kesatuan mentakrifkan satu set jenis yang mesti dipadankan oleh parameter jenis. Contohnya:
type intOrString interface { int | string }
Kekangan ini memastikan bahawa sebarang parameter jenis generik T mestilah sama ada int atau rentetan.
Mengapa Kesatuan Tidak Boleh Digunakan sebagai Jenis?
Kekangan antara muka dengan kesatuan bukan jenis antara muka biasa. Perbezaan ini disengajakan dalam reka bentuk generik Go.
Operasi Dibenarkan pada Kekangan Kesatuan
Fungsi menggunakan parameter jenis dengan kekangan kesatuan hanya boleh melaksanakan operasi yang dibenarkan oleh setiap ahli set kesatuan. Ini termasuk:
Memohon kepada Anda Soalan
Pendekatan asal anda menggunakan intOrString sebagai jenis, yang tidak dibenarkan. Untuk menggunakan kekangan kesatuan dengan betul, ubah suai kod anda seperti berikut:
type testDifferenceInput[T intOrString] [][]T type testDifferenceOutput[T intOrString] []T type testDifference[T intOrString] struct { input testDifferenceInput[T] output testDifferenceOutput[T] } func TestDifference(t *testing.T) { var ttInts []testDifference[int] var ttStrings []testDifference[string] // Populate ttInts and ttStrings with test cases for _, tt := range append(ttInts, ttStrings) { // Execute the test case } }
Dengan mengasingkan kes ujian berdasarkan parameter jenis, anda boleh mengatasi had bahawa bekas generik tidak boleh menyimpan item yang berbeza jenis.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Kesatuan Go Generik dengan Berkesan dalam Kekangan Jenis untuk Pengujian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!