Maison > développement back-end > Golang > Les implémentations d'interfaces anonymes peuvent-elles être réalisées en Go ?

Les implémentations d'interfaces anonymes peuvent-elles être réalisées en Go ?

DDD
Libérer: 2024-11-26 18:35:13
original
255 Les gens l'ont consulté

Can Anonymous Interface Implementations Be Achieved in Go?

Implémentation d'interface anonyme dans Go

Introduction

Go permet la définition de types personnalisés à l'aide d'interfaces. Cependant, cela soulève la question de savoir s'il est possible d'établir une implémentation anonyme d'une interface pour des situations où des fonctions spécifiques doivent être implémentées sous forme d'opérations simples.

Implémentation anonyme avec des fonctions

Le pseudo code fourni suggère de créer une implémentation anonyme similaire à :

RandomNumOp({
   Binary: func(a, b int) int { return a + b },
   Ternary: func(a, b, c int) int { return a + b + c },
})
Copier après la connexion

Limitations

Cependant, cette approche n'est pas directement réalisable dans Go car les déclarations de méthode doivent être définies au niveau du fichier. Par conséquent, pour implémenter une interface avec plusieurs méthodes, des déclarations de méthode explicites sont nécessaires.

Implémentation réalisable

Pour obtenir une implémentation réalisable, vous pouvez utiliser une structure existante ou créer une implémentation « factice » pour souligner l’absence de conséquences. Voici un exemple :

type DummyOp struct{}

func (DummyOp) Binary(_, _ int) int     { return 0 }
func (DummyOp) Ternary(_, _, _ int) int { return 0 }
Copier après la connexion

Vous pouvez également considérer un type de structure de délégué qui vous permet de fournir dynamiquement des fonctions pour les méthodes :

type CustomOp struct {
    binary  func(int, int) int
    ternary func(int, int, int) int
}

func (cop CustomOp) Binary(a, b int) int {
    if cop.binary != nil {
        return cop.binary(a, b)
    }
    return 0
}

func (cop CustomOp) Ternary(a, b, c int) int {
    if cop.ternary != nil {
        return cop.ternary(a, b, c)
    }
    return 0
}
Copier après la connexion

Exemple d'utilisation :

RandomNumOp(CustomOp{
    binary: func(a, b int) int { return a + b },
})
Copier après la connexion

Implémentation non fonctionnelle

Si votre implémentation ne nécessite pas de méthodes fonctionnelles, vous pouvez utiliser une structure anonyme littéral :

var op NumOp = struct{ NumOp }{}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal