GoでWebAPIを作成するにあたり、Goのディレクトリ構成に標準が存在するということで、調べた結果をアウトプットします。
目次
- Goのディレクトリ構成について
- ディレクトリ構成一覧
- 各ディレクトリの意味
- 参考にしたサイト
1. ディレクトリ構成について
Goのアプリケーションプロジェクトの基本的なレイアウトとなります。
Go開発チームによって定義された公式の標準ではありません。
これまでの大規模プロジェクトに共通するフォルダ構成になっているようです。
2. 一覧
┣━Project名/
┃ ┣━cmd
┃ ┣━internal
┃ ┣━pkg
┃ ┣━vender
┃ ┣━api
┃ ┣━web
┃ ┣━configs
┃ ┣━init
┃ ┣━scripts
┃ ┣━build
┃ ┣━deployments
┃ ┗━tests
┗━docker-compose.yml
3. 各フォルダの意味
1. /cmd
本プロジェクトのメインとなるディレクトリになります。
本ディレクトリの配下にアプリケーションのディレクトリを作成し、main.goを配置します。
┣━Project名/
┃ ┗━cmd
: ┗━myapp
: ┗━main.go
2. /internal
外部に公開したいくないプライベートなアプリケーションやライブラリのコードを配置します。
┣━Project名/
┃ ┣━cmd
┃ ┃ ┗━myapp
┃ ┃ ┗━main.go
┃ ┃
┃ ┗━internal
┃ ┗━app
┃ ┗━myapp
3. /pkg
外部に公開しても良いパブリックなアプリケーションやライブラリのコードを配置します。
本ディレクトリは、アプリケーションが小さい場合や本当に必要な場合以外は使用しないでください。
┣━Project名/
┃ ┣━cmd
┃ ┃ ┗━myapp
┃ ┃ ┗━main.go
┃ ┃
┃ ┗━internal
┃ ┃ ┗━app
┃ ┃ ┗━myapp
┃ ┃
┃ ┗━pkg
4. /vender
依存関係のある外部パッケージを配置します。
Go Modulesを利用している場合は、本ディレクトリは不要です。
5. /api
OpenAPIやSwaggerの仕様書を配置します。
6. /web
webアプリケーション固有のコンポーネントを配置します。
7. /configs
設定ファイルのテンプレートやデフォルトの設定を配置します。
8. /init
システムの初期化に必要なファイル等を配置します。
9. /scripts
実行したいSQLなどを配置します。
10. /build
Dockerfileなどのビルドに必要なファイルを配置します。
11. /deployments
k8sのyamlファイルなどを配置します。
docker-compose.ymlなども本ディレクトリに配置します。
12. /tests
外部テストアプリやテストデータを配置します。
4. 参考にしたサイト