Heim >Backend-Entwicklung >Golang >Wie erstelle ich benutzerdefinierte Typen mit Golang-Generika?
Golang 1.18 führt Generika ein, eine Möglichkeit, typisierten parametrisierten Code zu erstellen, der dabei hilft, hoch wiederverwendbaren und wartbaren Code zu erstellen. Es ermöglicht uns, Typen mit Typplatzhaltern zu definieren, die beim Erstellen von Instanzen des Typs durch bestimmte Typen ersetzt werden können.
Um einen benutzerdefinierten Typ zu erstellen, können Sie das Schlüsselwort type
verwenden, gefolgt vom Typnamen und den Typparametern. Typparameter werden in spitze Klammern a8093152e673feb7aba1828c43532094 eingeschlossen. Zum Beispiel können wir einen Typ namens Pair
erstellen, der ein Wertepaar eines beliebigen Typs speichert: type
关键字,后跟类型名称和类型参数。类型参数用尖括号 a8093152e673feb7aba1828c43532094 括起来。例如,我们可以创建名为 Pair
的类型,它存储任意类型的一对值:
type Pair[T1, T2 any] struct { first T1 second T2 }
其中:
T1
和 T2
是类型参数,表示可以由任何类型替换。struct
定义了一个包含两个字段 first
和 second
的结构体。一旦定义了自定义类型,就可以通过指定类型参数来创建它的实例。例如,要创建一个 Pair
实例来存储字符串和整数,我们可以使用以下代码:
pair := Pair[string, int]{"John", 30}
泛型在 Golang 中有许多实际应用。一个常见案例是创建泛型函数或方法,可以在各种类型上操作。例如,我们可以创建一个 Swap
函数,它可以在两种不同的类型上交换值:
func Swap[T1, T2 any](a *T1, b *T2) { temp := *a *a = *b *b = temp }
要使用此函数,我们可以传递两种不同类型的指针作为参数:
a := 5 b := "Hello" Swap(&a, &b) fmt.Println(a, b) // 输出:"Hello" 5
any
rrreeeT1
und T2
ist ein Typparameter, der angibt, dass er durch einen beliebigen Typ ersetzt werden kann. struct
definiert eine Struktur mit zwei Feldern: first
und second
. Pair
-Instanz zum Speichern von Zeichenfolgen und Ganzzahlen zu erstellen, können wir den folgenden Code verwenden: 🎜rrreee🎜Praktische Beispiele🎜🎜Generika haben in Golang viele praktische Anwendungen. Ein häufiger Fall besteht darin, generische Funktionen oder Methoden zu erstellen, die auf verschiedene Typen angewendet werden können. Zum Beispiel können wir eine Swap
-Funktion erstellen, die Werte auf zwei verschiedenen Typen austauscht: 🎜rrreee🎜Um diese Funktion zu verwenden, können wir Zeiger zweier verschiedener Typen als Argumente übergeben: 🎜rrreee 🎜Notizen🎜 any
verwenden, das angibt, dass der Parameter einen beliebigen Typ haben kann. 🎜🎜Typparameter können keine Typaliase oder Schnittstellen sein. 🎜🎜Typparameter dürfen keine Typeinschränkungen haben. 🎜🎜Das obige ist der detaillierte Inhalt vonWie erstelle ich benutzerdefinierte Typen mit Golang-Generika?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!