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à très 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 de moi touche), 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.
Faire un rapide zoom sur le noyau. J'essaie d'être simpliste ici et de ne pas créer de dossiers. Je n'entretiens qu'1 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)
Zoomez rapidement sur les détails. Voici simplement les outils grâce auxquels le domaine atteindra son succès.
Je suis encore un enfant sur le chemin proposé par Golang, je cherche toujours ce qu'on peut en faire, cependant, même si je n'aime pas la façon de faire de Golang, cela s'est avéré assez simple. et robuste.
Résumé, j'essaie de faire simple quand c'est possible et si ça 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
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!