Heim > Backend-Entwicklung > Golang > Wie kann ich Typparameter in Go-Schnittstellenmethoden verwenden?

Wie kann ich Typparameter in Go-Schnittstellenmethoden verwenden?

Patricia Arquette
Freigeben: 2024-11-29 08:43:10
Original
999 Leute haben es durchsucht

How Can I Use Type Parameters in Go Interface Methods?

Typparameter in Schnittstellenmethoden verwenden

Beim Versuch, eine generische Datenstruktur in Go zu implementieren, ist beim Definieren einer Iteratorschnittstelle ein Fehler aufgetreten mit einer Methode, die einen Typparameter annimmt. Dieser Artikel befasst sich mit dem Problem und bietet eine Lösung.

Fehler bei der Schnittstellendefinition

Der ursprüngliche Code definiert eine Schnittstelle mit einer Methode, die einen Funktionstypparameter annimmt, was dazu führte der Fehler: „Funktionstyp darf keine Typparameter haben.“ Ebenso führte das Verschieben des Typparameters zur Methode zu dem Fehler: „Methoden können keine Typparameter haben.“

Lösung: Generische Schnittstellendefinition

Wie durch den Fehler vorgeschlagen , Methoden können keine dedizierten Typparameter haben. Stattdessen besteht die Lösung darin, den Typparameter am Schnittstellentyp selbst anzugeben. Dadurch können Sie den Typparameter in Methoden innerhalb des Schnittstellenkörpers verwenden.

Der korrigierte Code:

type Iterator[T any] interface {
    ForEachRemaining(action func(T) error) error
    // other methods
}
Nach dem Login kopieren

Da der Typparameter für den Schnittstellentyp definiert ist, können Sie ihn jetzt verwenden die Methode wie erwartet:

type MyIterator[T any] struct {
    // implementation of the iterator
}

func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error {
    // implementation of the ForEachRemaining method using T
    return nil
}
Nach dem Login kopieren

Beispielverwendung

Das folgende Beispiel demonstriert die Verwendung der generischen Iteratorschnittstelle:

package main

import (
    "fmt"
    "collection"
)

type MyIterator[T any] struct {
    // implementation of the iterator
}

func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error {
    // implementation of the ForEachRemaining method using T
    return nil
}

func main() {
    myIterator := &MyIterator[int]{}
    _ = myIterator.ForEachRemaining(func(num int) error {
        fmt.Println(num)
        return nil
    })
}
Nach dem Login kopieren

Dieser Code definiert einen generischen Iterator, MyIterator, und verwendet ihn, um über ein Segment von Ganzzahlen zu iterieren und jeden Wert auszugeben.

Das obige ist der detaillierte Inhalt vonWie kann ich Typparameter in Go-Schnittstellenmethoden verwenden?. 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