Heim > Backend-Entwicklung > Golang > Wie können Generics in Go 1.18 das Problem der Erstellung typisierter Werte lösen, ohne dass es zu Programmabstürzen kommt?

Wie können Generics in Go 1.18 das Problem der Erstellung typisierter Werte lösen, ohne dass es zu Programmabstürzen kommt?

Barbara Streisand
Freigeben: 2024-12-06 01:29:09
Original
901 Leute haben es durchsucht

How Can Generics in Go 1.18 Solve the Problem of Creating Typed Values Without Causing Program Crashes?

So nutzen Sie Generics in Go 1.18 zum Erstellen typisierter Werte

In der Go-Programmierung ermöglichen Generics die Erstellung von Code, der mit verschiedenen Typen arbeitet ohne dass explizite Umwandlungen oder Typzusicherungen erforderlich sind. In diesem Artikel wird untersucht, wie Sie Generics in Go 1.18 verwenden, um neue Objekte mit typisierten Werten zu erstellen.

Hintergrund: Fruit Factory-Beispiel

Betrachten Sie das folgende vereinfachte „Fruit Factory“-Beispiel das versucht, generisch neue Instanzen von Früchten zu erstellen:

type FruitFactory[T any] struct{}

func (f FruitFactory[T]) Create() *T {
    // How do we create a non-nil fruit here?
    // Returning nil crashes the example.
    return nil
}

type Apple struct {
    color string
}
Nach dem Login kopieren

In diesem Beispiel besteht die Aufgabe darin, die Funktion „Erstellen“ abzuschließen Erstellen Sie eine neue Instanz vom Typ T (d. h. *Apple im Fall des Apple-Typs). Die einfache Rückgabe von Null reicht jedoch nicht aus und führt zum Absturz des Programms, wenn auf die Eigenschaften des Objekts zugegriffen wird.

Lösung: Typisierte Objekte erstellen

Es gibt zwei primäre Möglichkeiten, ein Objekt zu erstellen Neue Instanz eines typisierten Werts mit Generika in Go 1.18:

  1. Deklarativ Zuweisung: Deklarieren Sie eine typisierte Variable und geben Sie ihre Adresse zurück:
func (f FruitFactory[T]) Create() *T {
    var a T
    return &a
}
Nach dem Login kopieren
  1. Initialisierung mit neuem Schlüsselwort:Verwenden Sie new, um das Objekt zuzuweisen und zu initialisieren:
func (f FruitFactory[T]) Create() *T {
    return new(T)
}
Nach dem Login kopieren

Diese Lösungen ermöglichen es der Funktion, einen Nicht-Zeigerwert zu erstellen (a oder new(T)) und konvertieren Sie ihn bei Bedarf in einen Zeigertyp, indem Sie seine Adresse (&a) zurückgeben.

Beispielimplementierung

Im „ Beispiel „Fruit Factory“:

func (f FruitFactory[T]) Create() *T {
    var a T
    return &a
}

func example() {
    appleFactory := FruitFactory[Apple]{}
    apple := appleFactory.Create()
    apple.color = "red" // No panic now
}
Nach dem Login kopieren

Diese Modifikation ermöglicht die Erstellung eines neuen Apple-Objekts und das Festlegen seiner Eigenschaften, ohne dass eine Segmentierung auftritt Fehler.

Fazit

Mit Generika in Go 1.18 wird die Programmierung mit typisierten Werten erheblich vereinfacht. Durch die Nutzung der deklarativen Zuweisung oder des Schlüsselworts new ist es möglich, nahtlos neue Instanzen jeglichen Typs zu erstellen, wodurch die Notwendigkeit einer manuellen Umwandlung und fehleranfälliger Typzusicherungen entfällt.

Das obige ist der detaillierte Inhalt vonWie können Generics in Go 1.18 das Problem der Erstellung typisierter Werte lösen, ohne dass es zu Programmabstürzen kommt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage