Donc je me demande un peu quelle est la meilleure pratique ici.Paquets Golang et l'utilisation des variables à travers les paquets
J'ai une application avec plusieurs sous-paquets, certains exigent l'accès à l'enregistreur je dans le paquet principal, parce que j'utiliser un enregistreur personnalisé avec des couleurs et des horodateurs, etc.
est la seule façon d'y parvenir en injectant c'est comme ça? (En supposant Handler est dans un sous-paquetage appelé commande)
type Handler struct {
logger logging.Logger
}
func NewHandler(logger logging.Logger) Handler {
return Handler{
logger: logger,
}
}
handler := command.NewHandler(logger)
Cette question que j'ai avec cela est que le test devient ennuyeux car je dois se moquer de l'enregistreur pour les tests. Je pensais à juste retour des erreurs qui doivent être enregistrées et permettent la principale package deal avec eux, mais j'aimerais exécuter certains async fonctionnent comme si
go handler.HandleMessage(msg)
idk Alors, comment gérer les erreurs de fonctions asynchrones ou si C'est même possible.
Alors, y a-t-il une meilleure pratique pour faire ce que je veux?
Merci beaucoup! La fonction anonyme est une excellente idée. Pourriez-vous élaborer sur 2? Je ne peux pas passer à zéro. À quoi ressemble un "type concret"? – gempir
Si logging.Logger est une interface, vous devez en passer une implémentation à NewHandler pour y passer des appels. Si d'un autre côté, c'est une structure {} avec une méthode Log(), alors dans la fonction Log (Log * Logger) Log (msg string), vous pouvez vérifier si log == nil et retourner si c'est le cas. Cela signifie qu'un Logger vide (par exemple créer simplement Handler {}) est toujours valide - vous n'avez pas besoin de l'initialiser. –
Ahh d'accord ça a du sens. Dans mon cas, logging.Logger est une interface d'une bibliothèque tierce donc je devrais écrire un wrapper autour – gempir