Heim >Backend-Entwicklung >Golang >Wie können wir gemeinsames Verhalten für Sammlungen verschiedener Slice-Typen in Go definieren?
Definieren des gemeinsamen Verhaltens für eine Sammlung von Slices
Diese Untersuchung sucht nach Empfehlungen für die Etablierung eines konsistenten Verhaltens zwischen Sammlungen von Slices. Betrachten Sie das Beispiel der Arbeit mit halboffenen Intervallen. Angenommen, Sie haben zwei Arten solcher Intervalle:
Sowohl ClockInterval- als auch Period-Slices kommen im Code häufig vor. Die Herausforderung entsteht, wenn Sie das einschließende Intervall für eine bestimmte Zeit ermitteln müssen. Dies erfordert das Schreiben der FindEnclosingHalfOpenInterval-Funktion für beide Typen, was zu doppeltem Code führt.
Das bereitgestellte Codebeispiel (https://play.golang.org/p/Cy7fFaFzYJR) zeigt einen Ansatz, der die Typkonvertierung zwischen Slices beinhaltet. Es wirft jedoch die Frage auf, ob es eine effizientere Möglichkeit gibt, gemeinsames Verhalten für mehrere Slice-Typen zu definieren.
Slices konvertieren
Die geeignete Methode zum Konvertieren eines Slice Von einem Typ zum anderen wird ein neues Slice erstellt, die Elemente durchlaufen und einzeln konvertiert. Für eine schnellere Konvertierung können Sie das resultierende Slice vorab erstellen:
func ToIntervalsFromClockIntervals(clockIntervals []ClockInterval) HalfOpenIntervals { intervals := make(HalfOpenIntervals, 0, len(clockIntervals)) for _, clockInterval := range clockIntervals { intervals = append(intervals, clockInterval) } return intervals }
Komposition
Alternativ können Sie die Verwendung von Komposition in Betracht ziehen, um dieses Problem zu lösen. Dazu gehört das Erstellen einer Basisstruktur, die die allgemeine FindEnclosingInterval-Logik enthält. Zum Beispiel:
type HalfOpenIntervalBase struct { intervals []HalfOpenInterval } func (base *HalfOpenIntervalBase) FindEnclosingInterval(time Time) HalfOpenInterval { // Find and return the enclosing interval using base.intervals }
Sie können dann separate Typen für ClockInterval und Period erstellen, die diese Basisstruktur einbetten:
type ClockInterval struct { HalfOpenIntervalBase } type Period struct { HalfOpenIntervalBase }
Mit diesem Ansatz können sowohl ClockInterval als auch Period die FindEnclosingInterval-Funktionalität nutzen aus der Basisstruktur, Eliminierung Duplikation.
Überverallgemeinerung
Es ist wichtig zu beachten, dass eine Überverallgemeinerung kontraproduktiv sein kann. Während es verlockend ist, eine universelle Lösung zu verfolgen, die Codeduplizierung vermeidet, ist dies in Go nicht immer der praktischste Ansatz. Das Duplizieren von Code für verschiedene Typen ist oft notwendig und kann letztendlich zu saubererem und besser wartbarem Code führen.
Das obige ist der detaillierte Inhalt vonWie können wir gemeinsames Verhalten für Sammlungen verschiedener Slice-Typen in Go definieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!