Heim >Backend-Entwicklung >Golang >Wie können wir gemeinsames Verhalten für Sammlungen verschiedener Slice-Typen in Go definieren?

Wie können wir gemeinsames Verhalten für Sammlungen verschiedener Slice-Typen in Go definieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-05 02:48:09808Durchsuche

How Can We Define Common Behavior for Collections of Different Slice Types in Go?

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:

  • ClockInterval: Stellt ein Intervall innerhalb eines einzelnen Tages dar, z. B. „ab 13:00 Uhr danach.“
  • Zeitraum: Stellt ein Intervall ohne definiertes Ende dar, wie zum Beispiel „ab dem 9. Juli 1810 erklären wir.“ Unabhängigkeit.“

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn