Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Kami Boleh Mentakrifkan Gelagat Biasa untuk Koleksi Jenis Slice Berbeza dalam Go?
Mentakrifkan Gelagat Biasa untuk Koleksi Kepingan
Siasatan ini mencari pengesyoran untuk mewujudkan tingkah laku yang konsisten antara koleksi kepingan. Pertimbangkan contoh bekerja dengan selang separuh terbuka. Katakan anda mempunyai dua jenis selang sedemikian:
Kedua-dua ClockInterval dan hirisan Tempoh sering ditemui dalam kod. Cabaran timbul apabila anda perlu mencari selang penutup untuk masa tertentu. Ini memerlukan penulisan fungsi FindEnclosingHalfOpenInterval untuk kedua-dua jenis, yang membawa kepada kod pendua.
Sampel kod yang disediakan (https://play.golang.org/p/Cy7fFaFzYJR) menunjukkan satu pendekatan, yang melibatkan penukaran jenis antara kepingan. Walau bagaimanapun, ia menimbulkan persoalan sama ada terdapat cara yang lebih cekap untuk mentakrifkan gelagat biasa untuk berbilang jenis kepingan.
Menukar Kepingan
Kaedah yang sesuai untuk menukar kepingan daripada satu jenis kepada yang lain adalah untuk mencipta kepingan baharu dan mengulangi elemen, menukarnya secara individu. Untuk penukaran yang lebih pantas, anda boleh pra-membuat kepingan yang terhasil:
func ToIntervalsFromClockIntervals(clockIntervals []ClockInterval) HalfOpenIntervals { intervals := make(HalfOpenIntervals, 0, len(clockIntervals)) for _, clockInterval := range clockIntervals { intervals = append(intervals, clockInterval) } return intervals }
Komposisi
Sebagai alternatif, pertimbangkan untuk menggunakan gubahan untuk menyelesaikan masalah ini. Ini melibatkan mencipta struct asas yang mengandungi logik FindEnclosingInterval biasa. Contohnya:
type HalfOpenIntervalBase struct { intervals []HalfOpenInterval } func (base *HalfOpenIntervalBase) FindEnclosingInterval(time Time) HalfOpenInterval { // Find and return the enclosing interval using base.intervals }
Anda kemudiannya boleh mencipta jenis berasingan untuk ClockInterval dan Period yang membenamkan struct asas ini:
type ClockInterval struct { HalfOpenIntervalBase } type Period struct { HalfOpenIntervalBase }
Menggunakan pendekatan ini, ClockInterval dan Period boleh memanfaatkan fungsi FindEnclosingInterval dari struct asas, menghapuskan penduaan.
Pengertian Terlalu
Adalah penting untuk ambil perhatian bahawa generalisasi yang berlebihan boleh menjadi tidak produktif. Walaupun tergoda untuk mengejar penyelesaian universal yang mengelakkan pertindihan kod, ia bukanlah pendekatan yang paling praktikal dalam Go. Penduaan kod untuk jenis yang berbeza selalunya diperlukan dan akhirnya boleh membawa kepada kod yang lebih bersih dan boleh diselenggara.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mentakrifkan Gelagat Biasa untuk Koleksi Jenis Slice Berbeza dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!