Maison > développement back-end > Golang > Comment faire un chaînage de méthodes pour les interfaces ?

Comment faire un chaînage de méthodes pour les interfaces ?

PHPz
Libérer: 2024-02-13 08:39:08
avant
959 Les gens l'ont consulté

Comment faire un chaînage de méthodes pour les interfaces ?

L'éditeur PHP Xiaoxin vous présente une introduction sur la façon d'implémenter le chaînage de méthodes pour les interfaces. Le chaînage de méthodes est une méthode de programmation élégante qui peut appeler en continu plusieurs méthodes dans une seule instruction, améliorant ainsi la simplicité et la lisibilité du code. Dans cet article, nous présenterons en détail les conseils et précautions sur la façon d'implémenter le chaînage de méthodes pour les interfaces afin de vous aider à mieux appliquer la programmation en chaîne de méthodes et à améliorer l'efficacité et la maintenabilité de votre code. Explorons ensemble !

Contenu de la question

Je veux faire quelque chose comme obj.withx().withy().withz() 的事情。 obj qui peut avoir différents types, c'est pourquoi j'utilise des interfaces.

Malheureusement obj 也可以是 nil. Dans ce cas, mon chaînage de méthodes va paniquer car j'appelle une méthode sur une interface nulle et je ne sais pas quelle méthode appeler.

Voici l'exemple minimal reproductible

Comment continuer à utiliser le chaînage de méthodes sur des objets qui peuvent être nil ?

  • Existe-t-il un moyen de fournir des implémentations par défaut pour withx() et d'autres fonctions ?
  • J'ai également envisagé un modèle où chaque fonction d'attribut renvoie une fonction, mais cela semble trop complexe
obj.WithX().WithY()    // of type func() myInterface
obj.WithX().WithY()()  // now I got the actual object.
Copier après la connexion

Solution de contournement

Ces commentaires pour la plupart sont corrects, mais en fait, vous ne pouvez pas renvoyer un nil non typé.

func new(someParam bool) inter {
    // more complicated. May return A, B or nil
    if someParam {
        return &A{}
    }
    var b *B
    return b // which is nil, but of a type that implements the interface
}
Copier après la connexion

https://www.php.cn/link/845c31a2fbc3d2e14ecb17d48dcc65a4

Donc, en gros, vous avez juste besoin d'un type "par défaut", qui peut être nul et qui implémente toujours l'interface.

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:stackoverflow.com
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