Heim >Backend-Entwicklung >Golang >Sind die leeren Schnittstellen von Go oder die Generics von Go 1.18 die wahre Implementierung generischer Funktionen?

Sind die leeren Schnittstellen von Go oder die Generics von Go 1.18 die wahre Implementierung generischer Funktionen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-29 04:36:10334Durchsuche

Are Go's Empty Interfaces or Go 1.18 Generics the True Implementation of Generic Functions?

Generische Funktionen in Go: Ein umfassender Leitfaden

Beim Erkunden von Go stoßen Sie möglicherweise auf das Konzept einer leeren Benutzeroberfläche. Es ist ein leistungsstarkes Tool, das jeden Typ speichern kann und keine zusätzlichen Methoden erfordert.

Betrachten Sie dieses Beispiel:

func describe(i interface{}) {
    fmt.Printf("Type: %T | Value: %v\n", i, i)
}

Wenn Sie verschiedene Typen zur Beschreibung übergeben, werden Typ und Wert ausgegeben:

"Type: int | Value: 5" // for i := 5
"Type: string | Value: test" // for i := "test"

Ist das also Gos Art, generische Funktionen zu implementieren? Nicht ganz. Ab Go 1.18 können Sie nun echte generische Funktionen schreiben. Hier ist ein Beispiel:

package main

import (
    "fmt"
)

// T can be any type
func Print[T any](s []T) {
    for _, v := range s {
        fmt.Print(v)
    }
}

func main() {
    // Passing list of string works
    Print([]string{"Hello, ", "world\n"})

    // You can pass a list of int to the same function as well
    Print([]int{1, 2})
}

Ausgabe:

Hello, world
12

Diese generische Funktion Print kann Slices jeden Typs verarbeiten und bietet einen vielseitigeren und typsichereren Ansatz für die generische Programmierung.

Das obige ist der detaillierte Inhalt vonSind die leeren Schnittstellen von Go oder die Generics von Go 1.18 die wahre Implementierung generischer Funktionen?. 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