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
Barbara StreisandOriginal
2024-12-06 01:29:09826Durchsuche

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
}

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
}
  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)
}

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
}

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!

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