Unions in Go generics mewakili satu set jenis yang boleh digunakan untuk mengekang parameter jenis generik. Ia digunakan semata-mata dalam kekangan antara muka, menunjukkan bahawa parameter jenis generik T hanya boleh menerima jenis yang disertakan dalam kesatuan.
Apabila menulis ujian unit untuk fungsi generik, anda mungkin menghadapi cabaran ujian dengan jenis yang berbeza. Dalam kes anda, anda bertujuan untuk menguji fungsi Perbezaan anda dengan kedua-dua int dan rentetan dalam ujian jadual yang sama.
Percubaan anda untuk mencipta kekangan antara muka intOrString untuk ujian menghadapi ralat kerana intOrString bukan jenis yang sah. Ia adalah kekangan yang mengehadkan parameter jenis generik T kepada sama ada int atau rentetan. Anda tidak boleh membuat seketika jenis menggunakan kekangan jenis.
Daripada menggunakan kekangan intOrString, anda harus mengisytiharkan hirisan input dan output ujian anda sebagai jenis generik dengan kekangan intOrString:
type testDifferenceInput[T intOrString] [][]T type testDifferenceOutput[T intOrString] []T
Walau bagaimanapun, pendekatan ini tidak akan menyelesaikan masalah anda sepenuhnya. Bekas generik tidak boleh memuatkan item daripada jenis yang berbeza. Dalam kepingan ujian anda, anda mempunyai dua jenis berbeza: testDifference[int] dan testDifference[string].
Untuk menampung jenis yang berbeza dalam ujian unit anda, anda boleh memisahkan kepingan mengikut jenis:
ttInts := []testDifference[int]{ // ... test cases for ints } ttStrs := []testDifference[string]{ // ... test cases for strings }
Kesatuan kekangan mengehadkan operasi yang boleh dilakukan pada parameter jenis generik. Dalam kes int | rentetan, hanya operasi yang digunakan untuk kedua-dua jenis dibenarkan, seperti perbandingan, susunan dan penambahan (hanya untuk rentetan).
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguji Unit Generik Go Generik dengan Berkesan dengan Jenis Campuran dalam Kekangan Kesatuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!