私は今年 (2022 年) から実際に Golang を使ったプログラミングを始めました。すぐにやったことは、プロジェクトの構造を進化させる最善の方法は何かについての参考資料を探すことでした。この投稿は、同じテーマについて話している他の投稿のうちの 1 つにすぎません。おそらくそれが私がこの投稿を書こうと思った理由です。
第一に、golang はフォルダー/パッケージの処理方法がすでに大きく異なっており、さらに改善するには、非常に独自の本質を持っており、何かを行うための「goway」方法がどのようなものかを示す多くの公式ドキュメントが含まれています (fullただし、ファイルやフォルダーの整理方法には実際の方向性がないため、この部分については誰もが独自の世界解釈を行っています。
この投稿を 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-structural-my-go-project/
https://blog.logrocket.com/ flat-structure-vs-layered-architecture-structuring-your-go-app/
https://developer20.com/how-to-structural-go-code/
https://dev.to/jinxankit/go-project-structor-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
以上がGO — プロジェクト構造の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。