私は今年 (2022 年) から実際に Golang を使用したプログラミングを始めました。すぐにやったことは、プロジェクトの構造を進化させる最善の方法は何かについての参考資料を探すことでした。この投稿は、同じテーマについて語る他の多くの投稿のうちの 1 つにすぎません。おそらくそれが、私がこの投稿を書くことにした理由です。
第一に、golang はフォルダー/パッケージの処理方法がすでに完全に異なっており、さらに改善するには、非常に意見の強い本質があり、何かを行うための「goway」方法がどのようなものかを示す多くの公式ドキュメントが含まれています (完全版)ただし、ファイルやフォルダーの整理方法には特に方向性がないため、この部分については誰もが独自の世界観を与えています。
この投稿を 3 つの参考資料に分割し、これらの参考資料の組み合わせがプロジェクトでどのようになったかを示します。
常に機能する複雑なシステムは、機能する単純なシステムから進化しました。
-- ガルの法則
小規模なアプリケーションの場合、プロジェクト構造は単純である必要があります。
「コミュニティ」は、Go エコシステムで一般的な一連の歴史的および新たなデザイン レイアウト パターンの調査を行いました。この調査には素晴らしい点がたくさんありますが、私の注意を引いたのは、/cmd フォルダーと /internal フォルダーです。 .
このプロジェクトの主な用途
各アプリケーションのディレクトリ名は、必要な実行可能ファイルの名前と一致する必要があります (例: /cmd/myapp)。
プライベート アプリケーションおよびライブラリ コード。これは、他の人がアプリケーションやライブラリにインポートしたくないコードです。このレイアウト パターンは Go コンパイラー自体によって強制されることに注意してください。
実際に価値をもたらすものから「詳細」をより適切に分離するアーキテクチャ。
単純なアプリケーションの場合はシンプルに保つよう努めますが、スコープが少し大きくなると、何が「コア」/ドメインで何が詳細/インフラストラクチャであるかを少し区別するように努めます。
参照プロジェクトが示唆しているように、cmd には tuttipet フォルダーがないことに注意してください。最初は提案されたパターンを使用しようとしましたが、この API にはコマンド ライン インターフェイスと Terraform 用のプロバイダーがすでに提供されているため、このままにすることにしました。
コアをすばやくズームインします。ここでは単純化してフォルダーを作成しないようにします。私は外部との接点を 1 つ (main.go) だけ維持します。一般化されたものはすべて独自のファイルを持ち、そうでないものはそのコンテキスト内に残ります。単純です。
tuttipet.New (短く、簡潔で、刺激的) を使用すると、「ダーティ」レイヤーがユースケースと対話できます (ユースケースという言葉はインタラクターよりも理解しやすいと思います)
詳細を簡単に拡大してみます。ここにあるのは、ドメインが成功を達成するためのツールです。
私は Golang が提供するパスがまだ苦手で、Golang で何ができるかをまだ模索中ですが、Go の方法でいくつかのことを行うのは好きではありませんが、それは非常に効果的であることが証明されています。シンプルかつ堅牢。
要約。可能な限りシンプルにするように努めますが、複雑になりすぎた場合は、振り出しに戻ります。
https://dev.to/booscaaa/implementando-clean-architecture-com-golang-4n0a
https://github.com/golang-standards/project-layout
https://blog.boot.dev/golang/golang-project-structor/
https://github.com/bnkamalesh/goapp
https://www.wolfe.id.au/2020/03/10/how-do-i-structor-my-go-project/
https://blog.logrocket.com/フラット構造-vs-layered-architecture-structuring-your-go-app/
https://developer20.com/how-to-structural-go-code/
https://dev.to/jinxankit/go-project-structural-and-guidelines-4ccm
https://github.com/bxcodec/go-clean-arch
https://golangexample.com/example-go-clean-architecture-folder-pattern/
https://www.calhoun.io/フラットアプリケーション構造/
https://go.dev/doc/Effective_go#names
https://go.dev/blog/package-names
元の投稿: https://medium.com/@espigah/go-layout-do-projeto-18aacce8089d
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3