Maison >développement back-end >Golang >Comment puis-je utiliser les paramètres de type dans les méthodes de l'interface Go ?

Comment puis-je utiliser les paramètres de type dans les méthodes de l'interface Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-29 08:43:10934parcourir

How Can I Use Type Parameters in Go Interface Methods?

Utilisation des paramètres de type dans les méthodes d'interface

En essayant d'implémenter une structure de données générique dans Go, vous avez rencontré une erreur lors de la définition d'une interface d'itérateur avec une méthode prenant un paramètre de type. Cet article aborde le problème et propose une solution.

Erreur de définition d'interface

Le code initial définit une interface avec une méthode qui prend un paramètre de type de fonction, ce qui a conduit à l'erreur : "le type de fonction ne peut pas avoir de paramètres de type." De même, le déplacement du paramètre de type vers la méthode entraînait l'erreur : "les méthodes ne peuvent pas avoir de paramètres de type."

Solution : définition d'interface générique

Comme suggéré par l'erreur , Methoden ne peut pas avoir de paramètres de type dédiés. Au lieu de cela, la solution consiste à spécifier le paramètre type sur le type d’interface lui-même. Cela vous permet d'utiliser le paramètre type dans les méthodes du corps de l'interface.

Le code corrigé :

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

Avec le paramètre type défini sur le type d'interface, vous pouvez désormais l'utiliser dans la méthode comme prévu :

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
}

Exemple d'utilisation

L'exemple suivant montre l'utilisation de l'interface de l'itérateur générique :

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

Ce code définit un itérateur générique, MyIterator, et l'utilise pour parcourir une tranche d'entiers, en imprimant chaque valeur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn