Heim >Backend-Entwicklung >Golang >Wie interagieren generische Funktionen mit vorhandenen nicht generischen Funktionen in Golang?

Wie interagieren generische Funktionen mit vorhandenen nicht generischen Funktionen in Golang?

PHPz
PHPzOriginal
2024-04-16 17:36:01627Durchsuche

In Go können generische Funktionen mit nicht generischem Code interagieren, indem sie Typzusicherungen, Typaliase oder leere Schnittstellen verwenden. Typzusicherungen ermöglichen die Konvertierung von Werten in bestimmte Typen. Typaliase erstellen generische Aliase vorhandener Typen. Leere Schnittstellen können Variablen jeden Typs darstellen. Durch diese Methoden können generische Funktionen Werte von nicht generischen Typen akzeptieren oder zurückgeben und so die Datenverarbeitung über verschiedene Typen hinweg ermöglichen.

Wie interagieren generische Funktionen mit vorhandenen nicht generischen Funktionen in Golang?

So interagieren generische Funktionen mit nicht generischen Funktionen in Go

Go hat seit Go 1.18 generische Funktionen eingeführt und damit die Tür zur Wiederverwendung von Typen und Algorithmuscode geöffnet. Aber wie interagiert neuer generischer Code mit vorhandenem, nicht generischem Code?

Typzusicherungen verwenden

Typzusicherungen bieten eine Möglichkeit, eine Schnittstelle in einen Wert eines bestimmten Typs umzuwandeln. Dies kann mit einer Switch-Anweisung erfolgen:

func AnyToString(any interface{}) string {
    switch myString := any.(type) {
    case string:
        return myString
    default:
        return "Unknown"
    }
}

Diese Funktion versucht, einen beliebigen Wert in eine Zeichenfolge umzuwandeln und gibt „Unbekannt“ zurück, wenn es sich nicht um eine Zeichenfolge handelt.

Typ-Aliase verwenden

Typ-Aliase ermöglichen es Ihnen, Aliase für vorhandene Typen zu erstellen. Dadurch können wir einen generischen Alias ​​für einen nicht generischen Typ erstellen:

type MyString string

func GenericFunc[T MyString](t T) {}

Jetzt können wir den nicht generischen Typ MyString innerhalb einer generischen Funktion GenericFunc verwenden: MyString 在泛型函数 GenericFunc 中:

GenericFunc(MyString("Hello"))

使用空的接口

空的接口可以表示任何类型的变量。这允许我们创建接受或返回任何类型值的泛型函数:

func GenericEmptyInterfaceFunc(empty interface{}) {}

我们可以使用任何类型的值调用此函数:

GenericEmptyInterfaceFunc(10)
GenericEmptyInterfaceFunc("Hello")

实战案例:实现泛型排序

让我们通过对列表进行排序来演示泛型代码与非泛型代码的交互。

// Sort is a generic function that sorts a slice of any type that implements sort.Interface.
func Sort[T sort.Interface](s []T) {
    sort.Sort(s)
}

// IntSlice implements sort.Interface for a slice of int.
type IntSlice []int

func (s IntSlice) Len() int { return len(s) }
func (s IntSlice) Less(i, j int) bool { return s[i] < s[j] }
func (s IntSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

// StringSlice implements sort.Interface for a slice of string.
type StringSlice []string

func (s StringSlice) Len() int { return len(s) }
func (s StringSlice) Less(i, j int) bool { return s[i] < s[j] }
func (s StringSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

func main() {
    intSlice := IntSlice{10, 5, 7, 3, 11}
    Sort(intSlice)
    fmt.Println(intSlice) // Output: [3 5 7 10 11]

    stringSlice := StringSlice{"Hello", "World", "Go", "Golang"}
    Sort(stringSlice)
    fmt.Println(stringSlice) // Output: [Go Golang Hello World]
}

此代码演示了如何使用泛型函数 Sort rrreee

🎜Leere Schnittstelle verwenden🎜🎜🎜Eine leere Schnittstelle kann jede Art von Variable darstellen. Dadurch können wir generische Funktionen erstellen, die jede Art von Wert akzeptieren oder zurückgeben: 🎜rrreee🎜 Wir können diese Funktion mit jeder Art von Wert aufrufen: 🎜rrreee🎜🎜 Praktisches Beispiel: Implementierung einer generischen Sortierung 🎜🎜🎜 Sortieren wir die Liste nach Zur Demonstration die Interaktion zwischen generischem Code und nicht generischem Code. 🎜rrreee🎜Dieser Code zeigt, wie man die generische Funktion Sort verwendet, um verschiedene Wertelisten basierend auf einem benutzerdefinierten Typ zu sortieren. 🎜

Das obige ist der detaillierte Inhalt vonWie interagieren generische Funktionen mit vorhandenen nicht generischen Funktionen in Golang?. 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