LoginSignup
4
4

Goのディレクトリ構成の標準について

Posted at

GoでWebAPIを作成するにあたり、Goのディレクトリ構成に標準が存在するということで、調べた結果をアウトプットします。

目次

  1. Goのディレクトリ構成について
  2. ディレクトリ構成一覧
  3. 各ディレクトリの意味
  4. 参考にしたサイト

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. 参考にしたサイト

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4