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
Linda HamiltonOriginal
2024-12-19 02:24:091032Durchsuche

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
}

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

cannot use nil as T value in return statement

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
}

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

Ausgabe:

int 0
string ""
image.Point {0, 0}
*float64 <nil>

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!

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