J'ai une structure dans Go qui a plus de dix méthodes. Et tous sont presque les mêmes. En fait, la différence est seulement dans une ligne.Quelque chose comme les expressions lambda dans Go (fusionner des méthodes similaires)
Voyons l'exemple simplifié. Voici la première méthode:
func (s *service) GetUser(i int, s string) (*SomeObject, error) {
CommonMethod1()
CommonMethod2()
user, err := s.internalLayer.GetUser(i, s)
if err != nil {
CommonMethod3()
}
return user, err
}
Et le second:
func (s *service) CheckUser(i int) (bool, error) {
CommonMethod1()
CommonMethod2()
exists, err := s.internalLayer.CheckUser(i)
if err != nil {
CommonMethod3()
}
return exists, err
}
Et il y a près de 10 autres avec beaucoup de copier et coller. Je voudrais améliorer ce code et l'idée est de créer une méthode commune que j'appellerai partout.
Il devrait
- appel
CommonMethod1()
- appel
CommonMethod2()
- appel d'une méthode que je passe à dans le paramètre
- appel
CommonMethod3()
en cas d'erreur - paramètres de retour
Pouvez-vous me dire s'il est possible d'implémenter cette méthode commune dans Go?
user, err := s.GetUser(i, s)
exists, err := s.CheckUser(i)
A différents paramètres comptent et différents types de retour.
Dans vos exemples, chaque méthode appelle inconditionnellement elle-même, est pas une "récursivité" sans fin? – icza
Bonne remarque. Je l'ai simplifié beaucoup. En fait, il appelle une couche interne. 's.internalLayer.CheckUser (i)' Corrigé. – Vitalii