ホームページ バックエンド開発 Golang GO — プロジェクト構造

GO — プロジェクト構造

Jul 17, 2024 am 03:41 AM

私は今年 (2022 年) から実際に Golang を使ったプログラミングを始めました。すぐにやったことは、プロジェクトの構造を進化させる最善の方法は何かについての参考資料を探すことでした。この投稿は、同じテーマについて話している他の投稿のうちの 1 つにすぎません。おそらくそれが私がこの投稿を書こうと思った理由です。

第一に、golang はフォルダー/パッケージの処理方法がすでに大きく異なっており、さらに改善するには、非常に独自の本質を持っており、何かを行うための「goway」方法がどのようなものかを示す多くの公式ドキュメントが含まれています (fullただし、ファイルやフォルダーの整理方法には実際の方向性がないため、この部分については誰もが独自の世界解釈を行っています。

この投稿を 3 つの参考資料に分割し、これらの参考資料の組み合わせがプロジェクトでどのようになったかを示します。

最初の参考資料

常に機能する複雑なシステムは、機能する単純なシステムから進化しました。
-- ガルの法則

小規模なアプリケーションの場合、プロジェクト構造はシンプルである必要があります。

Imagem para um projeto simples com tudo na raiz


https://innovation.enova.com/gophercon-2018-how-do-you-structural-your-go-apps/

2番目の参考資料

「コミュニティ」は、Go エコシステムで一般的な一連の歴史的デザイン レイアウト パターンと新しいデザイン レイアウト パターンの調査を行いました。この調査には素晴らしい点がたくさんありますが、私の注意を引いたのは /cmd フォルダーと /internal フォルダーです。 .

/cmd

このプロジェクトの主な用途
各アプリケーションのディレクトリ名は、必要な実行可能ファイルの名前と一致する必要があります (例: /cmd/myapp)。

/内部

プライベートアプリケーションおよびライブラリコード。これは、他の人がアプリケーションやライブラリにインポートしたくないコードです。このレイアウト パターンは Go コンパイラー自体によって強制されることに注意してください。

3番目の参考資料

実際に価値をもたらすものから「詳細」をより適切に分離するアーキテクチャ。

GO — Estrutura de projetos


結果

単純なアプリケーションの場合はシンプルに保つよう努めますが、範囲が少し大きくなると、「コア」/ドメインと詳細/インフラストラクチャを少し区別するように努めます。

GO — Estrutura de projetos


参照プロジェクトが示唆しているように、cmd には tuttipet フォルダーがないことに注意してください。最初は提案されたパターンを使用しようとしましたが、この API にはコマンド ライン インターフェイスと Terraform 用のプロバイダーがすでに提供されているため、このままにすることにしました。

GO — Estrutura de projetos


コアを素早くズームインします。ここでは単純化してフォルダーを作成しないようにします。私は外部世界との接点を 1 つだけ維持します (main.go)。一般化されたものはすべて独自のファイルを持ち、そうでないものはそのコンテキスト内に残ります。シンプルです。

GO — Estrutura de projetos


tuttipet.New (短く、簡潔で、刺激的) を使用すると、「ダーティ」レイヤーがユースケースと対話できます (ユースケースという言葉はインタラクターよりも理解しやすいと思います)

GO — Estrutura de projetos


詳細をすばやく拡大します。ここにあるのは、ドメインが成功を達成するためのツールです。

結論

私はまだ 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

Goでユニットテストをどのように書きますか? Goでユニットテストをどのように書きますか? Mar 21, 2025 pm 06:34 PM

Goでユニットテストをどのように書きますか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

See all articles