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
DDDoriginal
2024-11-26 18:35:13286parcourir

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

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 }

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
}

Exemple d'utilisation :

RandomNumOp(CustomOp{
    binary: func(a, b int) int { return a + b },
})

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

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