Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Kami Boleh Mentakrifkan Gelagat Biasa untuk Koleksi Jenis Slice Berbeza dalam Go?

Bagaimanakah Kami Boleh Mentakrifkan Gelagat Biasa untuk Koleksi Jenis Slice Berbeza dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-05 02:48:09
asal
853 orang telah melayarinya

How Can We Define Common Behavior for Collections of Different Slice Types in 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:

  • Selang Jam: Mewakili selang dalam satu hari, seperti "dari 1:00 petang selepas itu."
  • Tempoh: Mewakili selang tanpa penghujung yang ditentukan, seperti "mulai 9 Julai 1810 kami mengisytiharkan kemerdekaan."

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

Anda kemudiannya boleh mencipta jenis berasingan untuk ClockInterval dan Period yang membenamkan struct asas ini:

type ClockInterval struct {
    HalfOpenIntervalBase
}

type Period struct {
    HalfOpenIntervalBase
}
Salin selepas log masuk

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!

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