ディレクトリ構成
golang-standards/project-layout に準拠。
.
├── build/
│ └── package/
│ └── build.sh # Lambda バイナリのビルドスクリプト
├── cmd/
│ ├── lambda/
│ │ └── main.go # Lambda エントリポイント
│ └── server/
│ └── main.go # ローカル開発用 HTTP サーバー(:8080)
├── deployments/
│ └── Dockerfile # Lambda コンテナイメージビルド定義
├── docs/ # ドキュメントサブモジュール
├── internal/
│ ├── handler/
│ │ └── upload.go # リクエスト解析・バリデーション・S3 保存呼び出し
│ └── storage/
│ └── s3.go # S3 PutObject ラッパー
├── api/ # swaggo 生成ファイル(自動生成・直接編集不可)
├── go.mod
├── go.sum
└── Makefile
各ディレクトリの役割
| ディレクトリ | 役割 |
|---|---|
build/package/ |
Lambda 向けクロスコンパイルスクリプト |
cmd/lambda/ |
Lambda エントリポイント。依存の組み立てのみを行い、ロジックは持たない |
cmd/server/ |
ローカル開発用エントリポイント。Echo を直接 :8080 で起動する |
deployments/ |
Lambda コンテナイメージの Dockerfile |
docs/ |
プロジェクトドキュメント(サブモジュール) |
internal/handler/ |
アップロードリクエストの解析・バリデーション・レスポンス生成 |
internal/storage/ |
S3 操作の抽象化(Storer インターフェース経由で handler から利用) |
api/ |
swaggo が生成する OpenAPI 仕様・Swagger UI 用データ(自動生成、直接編集不可) |
依存関係
internal/handler は Storer インターフェースを通じて internal/storage を利用する。cmd 層でインターフェースの実装を注入し、テスト時はモック実装に差し替えられる。