Ich habe dieses Jahr (2022) angefangen, wirklich mit Golang zu programmieren, und habe sofort nach Referenzen gesucht, wie ich meine Struktur für das Projekt am besten weiterentwickeln kann. Dieser Beitrag wird nur einer von vielen anderen sein, die sich mit demselben Thema befassen, und vielleicht habe ich mich deshalb entschieden, ihn zu schreiben.
Erstens ist Golang bereits völlig anders in der Art und Weise, wie es mit Ordnern/Paketen umgeht, und zur Verbesserung hat es ein sehr eigensinniges Wesen, wobei viele offizielle Dokumente darüber informieren, wie „Goway“ etwas tun würde (vollständig Allerdings gibt es in der Art und Weise, wie Sie Ihre Dateien und Ordner organisieren, keine wirkliche Richtung, sodass jeder diesem Teil seine eigene Interpretation der Welt gibt.
Ich werde diesen Beitrag in 3 Referenzen unterteilen und dann zeigen, wie die Mischung dieser Referenzen im Projekt ausgefallen ist.
Ein komplexes System, das funktioniert, hat sich immer aus einem einfachen System entwickelt, das funktioniert.
-- Gallsches Gesetz
Bei kleinen Anwendungen muss die Projektstruktur einfach sein.
Die „Community“ hat eine Reihe historischer und neuer Design-Layoutmuster durchgeführt, die im Go-Ökosystem üblich sind. In dieser Umfrage gibt es viele coole Dinge, aber was meine Aufmerksamkeit erregte, waren die Ordner /cmd und /internal .
Hauptanwendungen für dieses Projekt.
Der Verzeichnisname für jede Anwendung muss mit dem Namen der gewünschten ausführbaren Datei übereinstimmen (z. B. /cmd/myapp).
Privater Anwendungs- und Bibliothekscode. Dies ist Code, den andere nicht in ihre Anwendungen oder Bibliotheken importieren sollen. Beachten Sie, dass dieses Layoutmuster vom Go-Compiler selbst vorgegeben wird.
Architekturen, die die „Details“ besser von dem trennen, was wirklich Wert liefert.
Für eine einfache Anwendung versuche ich, sie einfach zu halten. Wenn der Umfang jedoch etwas größer wird, versuche ich, leicht zwischen „Kern“/Domäne und Detail/Infrastruktur zu unterscheiden.
Beachten Sie, dass ich in cmd nicht über den Tuttipet-Ordner verfüge, wie das Referenzprojekt vermuten lässt. Zuerst habe ich versucht, das vorgeschlagene Muster zu verwenden, aber da diese API bereits mit einer Befehlszeilenschnittstelle und einem Anbieter für Terraform herauskam, habe ich beschlossen, es dabei zu belassen.
Machen Sie einen kurzen Blick auf den Kern. Ich versuche hier einfach zu sein und keine Ordner zu erstellen. Ich pflege nur einen Kontaktpunkt mit der Außenwelt (main.go), alles, was verallgemeinert wird, hat seine eigene Datei und alles, was nicht, bleibt einfach in seinem Kontext.
Mit tuttipet.New (kurz, prägnant und eindrucksvoll) kann die „schmutzige“ Ebene mit den Anwendungsfällen interagieren (ich finde das Wort „Usecase“ leichter zu assimilieren als Interaktor)
Machen Sie einen kurzen Blick auf die Details. Hier sind einfach die Werkzeuge, mit denen die Domain ihren Erfolg erzielen wird.
Ich bin immer noch schwach in Bezug auf den Weg, den Golang bietet, und versuche immer noch herauszufinden, was man damit machen kann. Obwohl mir die Go-Methode, einige Dinge zu tun, nicht gefällt, hat sie sich jedoch als recht erwiesen einfach und robust.
Zusammenfassung: Ich versuche, es möglichst einfach zu halten, und wenn es zu komplex wird ... gehe ich zurück ans Zeichenbrett.
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
Originalbeitrag: https://medium.com/@espigah/go-layout-do-projeto-18aacce8089d
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3