„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie können wir in Golang generische Funktionen für verschiedene Datentypen erstellen?

Wie können wir in Golang generische Funktionen für verschiedene Datentypen erstellen?

Veröffentlicht am 09.11.2024
Durchsuche:735

 How Can We Create Generic Functions in Golang for Different Data Types?

Generische Methodenparameter in Golang

In Go besteht eine häufige Anforderung darin, eine Funktion zu haben, die mit Daten verschiedener Typen arbeitet. Nehmen Sie zum Beispiel eine Funktion, die die Anzahl der Elemente in einem Slice eines bestimmten Typs zählt. Wie kann man diese Funktion so gestalten, dass sie jeden Datentyp verarbeiten kann, nicht nur den spezifischen Typ, für den sie ursprünglich entwickelt wurde?

Ein Ansatz besteht darin, Schnittstellen zu verwenden, bei denen es sich im Wesentlichen um Verträge handelt, die eine Reihe von Methoden definieren, die ein Typ benötigen muss implementieren, um der Schnittstelle zu entsprechen. Indem wir Schnittstellen als Methodenparameter verwenden, können wir generische Funktionen schreiben, die mit jedem Typ arbeiten können, der die erforderliche Schnittstelle implementiert.

Betrachten Sie das folgende Beispiel, in dem wir eine generische Count-Funktion erstellen möchten, die die Anzahl der Elemente zählt in einem Slice:

func Count[T any](s []T) int {
  return len(s)
}

Mithilfe solcher Generika können wir Slices jeden Typs an Count übergeben, sodass Elemente dynamisch basierend auf dem Eingabetyp gezählt werden können.

Darüber hinaus können wir Schnittstellen verwenden, um generische Methoden zu implementieren für bestimmte Aufgaben. Beispielsweise können wir eine Identifiable-Schnittstelle mit einer GetID-Methode definieren und eine generische FindByID-Funktion erstellen, die basierend auf ihrem ID-Wert nach einem Element innerhalb eines Slice sucht, unabhängig vom tatsächlichen Typ der Slice-Elemente:

type Identifiable interface {
  GetID() int
}

func FindByID[T Identifiable](s []T, id int) *T {
  for i, v := range s {
    if v.GetID() == id {
      return &s[i]
    }
  }
  return nil
}

Durch die Integration von Schnittstellen und Generika erhalten wir die Möglichkeit, Funktionen zu erstellen, die äußerst flexibel sind und effektiv mit Daten verschiedener Typen arbeiten können.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3