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

Wie kann ich Typparameter in Go-Schnittstellenmethoden verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-29 08:43:10949Durchsuche

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
}

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
}

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

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!

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