Docker 環境を用意している
$ go version go version go1.16.1 darwin/amd64 $ mysql --version mysql Ver 8.0.26 for Linux on x86_64 (MySQL Community Server - GPL)$ go get -u github.com/pressly/goose/v3/cmd/goose $ which goose /Users/yuki.watanabe/.goenv/shims/goose $ go get -u github.com/cosmtrek/air $ which air /Users/yuki.watanabe/.goenv/shims/air # 初期化 $ air init$ make db-migrate# コンテナに入る $ docker-compose run --rm api sh # 接続確認 $ goose mysql $DSN status # 適用 $ cd infra/migrations $ goose mysql $DSN up # ロールバック $ cd infra/migrations $ goose mysql $DSN down- マイグレーションを適用する際は、
migrationsまで移動する必要がある - 引数に
$DSN("user:password@tcp(db:3306)/go_blog?charset=utf8&parseTime=true&loc=Asia%2FTokyo")が必要となる
# air コマンドでホットリロードで起動 $ docker-compose updocker exec -it <container_id> sh mysql -u user -p - 記事の作成、編集、削除に必要となる
- コマンド引数にユーザー名、パスワードを渡す
$ docker-compose run --rm api go run infra/seeds/main.go <user_name> <password># ./... で階層指定 $ docker-compose run --rm api go test ./... -v- テスト対象のディレクトリか関数を指定する
$ make generate-api クリーンアーキテクチャーをベースにした構成にしている
- handler
- router: リクエストとハンドラのマッピングをする(ルーティングの役割)
- handler: ハンドラ関数(リクエストを受け取りレスポンスを返す関数)を記述する
- infra
- sqlhandler: DBとのコネクションを確立する
- <model_name>: データストアからデータを取得するための処理を記述する。クエリ結果をモデルに(GoのStruct)にマッピングする。domain層のRepositoryで定義したinterfaceを満たすメソッドを持つ構造体を返す。
- その他: マイグレーションスクリプトを配置する
- usecase: handlerから呼び出される。ドメイン層で定義されたメソッドを、リポジトリを使って呼び出すためのユースケース記述レベルの抽象度の高いコードを記載する。
- domain:
- model: ドメインモデルを定義する。データベースに保管されたカラムをプログラム上においてどのようなデータ構造で利用するかを記述する。モデルに紐付いたビジネスロジックも対象となる。
- repository: ドメインモデルのの永続化、再構築を担うためのインターフェースを定義する
- middleware: カスタムのミドルウェアを設定する
- util: ドメインモデルとは関連のないヘルパー関数を配置する