Heim > Backend-Entwicklung > Golang > Wie gebe ich in Go Standardwerte für generische Typen zurück?

Wie gebe ich in Go Standardwerte für generische Typen zurück?

Linda Hamilton
Freigeben: 2024-12-19 02:24:09
Original
974 Leute haben es durchsucht

How to Return Default Values for Generic Types in Go?

Standardwerte für generische Typen in Go zurückgeben

Wie können Sie in Go einen Standardwert für einen generischen Typ T zurückgeben? Betrachten Sie den folgenden Code:

type mylist[T any] struct {
    first *node[T]
}

type node[T any] struct {
    data T
    next *node[T]
}

func (list *mylist[T]) pop() T {
    if list.first != nil {
        data := list.first.data
        list.first = list.first.next
        return data
    }
    return nil
}

func (list *mylist[T]) getfirst() T {
    if list.first != nil {
        return list.first.data
    }
    return nil
}
Nach dem Login kopieren

Beim Versuch, diesen Code zu kompilieren, kann der Fehler auftreten:

cannot use nil as T value in return statement
Nach dem Login kopieren

The Issue of Returning Nil

Die Rückgabe von Null für einen generischen Typ ist in Go nicht zulässig. Dies liegt daran, dass Null nicht für alle Typen ein gültiger Wert ist. Wenn T beispielsweise eine Ganzzahl ist, wäre die Rückgabe von Null bedeutungslos. Ebenso ist Null kein gültiger Wert für Strukturen.

Rückgabe des Nullwerts

Anstatt Null zurückzugeben, sollten Sie den Nullwert für das verwendete Typargument zurückgeben T. Der Nullwert ist Null für Zeiger und Slices, der leere String für Strings und 0 für Ganzzahlen und Gleitkommazahlen Zahlen.

Um den Nullwert zurückzugeben, können Sie eine Variable vom Typ T deklarieren und zurückgeben:

func getZero[T any]() T {
    var result T
    return result
}
Nach dem Login kopieren

Testen der Nullwertfunktion

Hier ist ein Beispiel, wie man getZero testet Funktion:

package main

import "fmt"

func main() {
    i := getZero[int]()
    fmt.Printf("%T %v\n", i, i)

    s := getZero[string]()
    fmt.Printf("%T %q\n", s, s)

    p := getZero[image.Point]()
    fmt.Printf("%T %v\n", p, p)

    f := getZero[*float64]()
    fmt.Printf("%T %v\n", f, f)
}
Nach dem Login kopieren

Ausgabe:

int 0
string ""
image.Point {0, 0}
*float64 <nil>
Nach dem Login kopieren

Dies zeigt, dass die getZero-Funktion die erwarteten Nullwerte für verschiedene Typen zurückgibt.

Das obige ist der detaillierte Inhalt vonWie gebe ich in Go Standardwerte für generische Typen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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