Gemeinsames Verhalten für Sammlungen von Slices
In Go kann die Arbeit mit Sammlungen von Slices unterschiedlichen Typs bei der Implementierung gemeinsamer Funktionen zu Herausforderungen führen. Dies gilt insbesondere dann, wenn Elemente zum Vergleich und zur Verarbeitung zwischen Typen konvertiert werden müssen.
Betrachten Sie den Fall der Arbeit mit halboffenen Intervallen, die Zeiträume mit einem definierten Startpunkt darstellen. Es gibt mehrere Arten von halboffenen Intervallen, wie zum Beispiel ClockInterval (beschränkt auf einen Tag) und Period (beschränkt auf die Existenz des Universums).
Typischerweise , würden Sie Slices dieser verschiedenen Intervalltypen erstellen und eine gemeinsame Funktion benötigen, um das einschließende Intervall für eine bestimmte Zeit zu finden, unabhängig vom Intervall Typ.
Ein Ansatz, wie im referenzierten Code gezeigt, besteht darin, jedes Slice manuell in einen gemeinsamen Typ zu konvertieren, bevor die einschließende Intervallfunktion angewendet wird. Diese Methode erfordert jedoch explizite Konvertierungen für jeden neu hinzugefügten Intervalltyp.
Überlegungen zur Konvertierung
Direkte Konvertierungen zwischen Slices unterschiedlicher Typen werden in Go nicht unterstützt. Der richtige Ansatz besteht darin, ein neues Slice zu erstellen und es zu durchlaufen, wobei jedes Element einzeln konvertiert wird. Dies kann durch Vorabzuweisung des neuen Slice optimiert werden.
Komposition vs. Vererbung
Komposition ist ein alternativer Ansatz zur Definition des gemeinsamen Verhaltens für Sammlungen von Slices. Anstelle eines einzelnen Slice-Typs können Sie einen Basistyp definieren, der die allgemeine Funktionalität kapselt und darin Slices unterschiedlicher Typen speichert. Dies ermöglicht die einmalige Implementierung der einschließenden Intervallfunktion innerhalb des Basistyps und den Zugriff auf das innere Slice über praktische Funktionen.
Dieser Ansatz hat Kompromisse. Es vermeidet zwar die Duplizierung von Code, erfordert jedoch zusätzliche Komfortfunktionen für die Interaktion mit dem inneren Slice und ist für bestimmte Anwendungsfälle möglicherweise weniger effizient.
In Go ist es in bestimmten Fällen üblich, Code für verschiedene Typen zu duplizieren Szenarien. Dies liegt daran, dass die Sprache explizite Typsicherheit und Trennung von Bedenken fördert, anstatt sich stark auf Vererbung und abstrakte Klassen zu verlassen, wie in objektorientierten Programmierparadigmen.
Das obige ist der detaillierte Inhalt vonWie können wir gemeinsame Funktionen für Sammlungen von Slices unterschiedlicher Typen in Go implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!