J'ai commencé à programmer en utilisant Golang pour de vrai cette année (2022), et ce que j'ai immédiatement fait a été de chercher des références sur quelle serait la meilleure façon de faire évoluer ma structure pour le projet. Cet article ne sera qu'un parmi tant d'autres qui parlent du même sujet, et c'est peut-être pour cela que j'ai décidé de l'écrire.
Premièrement, golang est déjà complètement différent dans la façon dont il traite les dossiers/packages, et, pour l'améliorer, il a une essence très opiniâtre, avec de nombreux documents officiels informant quelle serait la manière « goway » de faire quelque chose (version complète ne me touche pas), cependant, dans la façon dont vous organisez vos fichiers et dossiers, il n'y a pas vraiment de direction, donc chacun donne en quelque sorte sa propre interprétation du monde à cette partie.
Je vais diviser cet article en 3 références, puis montrer comment le mélange de ces références s'est révélé dans le projet.
Un système complexe qui fonctionne a invariablement évolué à partir d'un système simple qui fonctionnait.
-- Loi de Gall
Pour les petites applications, la structure du projet doit être simple.
La « communauté » a mené une enquête sur un ensemble de modèles de conception historiques et émergents courants dans l'écosystème Go. Il y a beaucoup de choses intéressantes dans cette enquête, mais ce qui a attiré mon attention, ce sont les dossiers /cmd et /internal. .
Principales applications de ce projet.
Le nom du répertoire de chaque application doit correspondre au nom de l'exécutable que vous souhaitez avoir (par exemple /cmd/myapp).
Application privée et code de bibliothèque. Il s'agit d'un code que vous ne souhaitez pas que d'autres importent dans leurs applications ou bibliothèques. Notez que ce modèle de mise en page est imposé par le compilateur Go lui-même.
Des architectures qui séparent mieux les « détails » de ce qui apporte réellement de la valeur.
Pour une application simple, j'essaie de rester simple, cependant, lorsque la portée s'agrandit un peu, j'essaie de faire une légère différenciation entre ce qui est « noyau »/domaine et ce qui est détail/infrastructure.
Notez que dans cmd je n'ai pas le dossier tuttipet, comme le suggère le projet de référence. Au début, j'ai essayé d'utiliser le modèle suggéré, mais comme cette API était déjà disponible avec une interface de ligne de commande et un fournisseur pour Terraform, j'ai décidé de le laisser ainsi.
Faites un zoom rapide sur le noyau. J'essaie d'être simpliste ici et de ne pas créer de dossiers. Je n'entretiens qu'un seul point de contact avec le monde extérieur (main.go), ce qui est généralisé a sa propre fiche et ce qui ne l'est pas reste dans son contexte, simple.
Avec tuttipet.New (court, concis et évocateur) la couche "sale" peut interagir avec les cas d'utilisation (je trouve le mot cas d'utilisation plus facile à assimiler qu'interacteur)
Faites un zoom rapide sur les détails. Voici simplement les outils grâce auxquels le domaine atteindra son succès.
Je suis encore faible dans la voie proposée par Golang, j'essaie toujours de comprendre ce qu'on peut en faire, cependant, même si je n'aime pas la façon dont Golang fait certaines choses, elle s'est avérée assez simple et robuste.
Résumé, j'essaie de garder les choses simples lorsque cela est possible et si cela devient trop complexe... je retourne à la planche à dessin.
https://dev.to/booscaaa/implementando-clean-architecture-com-golang-4n0a
https://github.com/golang-standards/project-layout
https://blog.boot.dev/golang/golang-project-structure/
https://github.com/bnkamalesh/goapp
https://www.wolfe.id.au/2020/03/10/how-do-i-structure-my-go-project/
https://blog.logrocket.com/flat-structure-vs-layered-architecture-structuring-your-go-app/
https://developer20.com/how-to-structure-go-code/
https://dev.to/jinxankit/go-project-structure-and-guidelines-4ccm
https://github.com/bxcodec/go-clean-arch
https://golangexample.com/example-go-clean-architecture-folder-pattern/
https://www.calhoun.io/flat-application-structure/
https://go.dev/doc/effective_go#names
https://go.dev/blog/package-names
Message original : https://medium.com/@espigah/go-layout-do-projeto-18aacce8089d
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3