Open16

Goで小さく始める時のディレクトリ構成とアーキテクチャを考える

yuto-myuto-m

Clean Architectureのサンプル。
ぱっと見下記は変えたい気がするが、概ねいい感じな気はする。

  • entity分けなくても良さそう?repoに入れておいても良さそう。entityをなくすとオニオンぽくなるのかも?
  • routing定義が分散するのやめたい?

https://github.com/evrone/go-clean-template

下記も結構良き。JWTで認証組み込みたい時に参考になりそう。
https://github.com/amitshekhariitbhu/go-backend-clean-architecture/tree/main

レイヤーで分ける or 機能毎で分けるの発想が微妙に違うとディレクトリ構成が微妙に変わるぽい。
例えば下記の場合だとinternal/album配下にservice, repositoryが入ってるけど、上記2つのrepoだとそれぞれpackageに分けてる。
https://github.com/qiangxue/go-rest-api/tree/master

参考
下記の記事で紹介されていたリポジトリを参照した。
https://zenn.dev/naoki_kuroda/articles/8a7dc8dc10f5f9

yuto-myuto-m

templateから作りたいときはUse this templateから作れるの便利。

yuto-myuto-m

postgresをmysqlにしつつ、不要なコード(ex. rabbitmq)を消したい。

yuto-myuto-m

make runを叩くためにはローカルにswagを入れてあげる必要がある。
make runはswagを入れてもなんかエラーが出るので一旦無視。

go-migrateを入れてあげてmigrationを実行する。
なかなかに不親切。

手順的には下記。

# ~/go/bin/swagに入った。人によっては違う場所に入るかも。
go install github.com/swaggo/swag/cmd/swag@latest

# https://zenn.dev/keyamin/articles/24695c455c1591#cli-%E3%81%A7%E8%A9%A6%E3%81%99
brew install golang-migrate
make  migrate-up

テーブルができる。

yuto-myuto-m

make runを叩くためにはswagのversionを1.7.8にすれば行けた。
詳しくはこのissueにあるようにswag.Specっていう定数が1.7.8までにしかなくてエラーを発生してしまうのが原因ぽい。

下記で立ち上がるはず

go install github.com/swaggo/swag/cmd/swag@v1.7.8

~/go/bin/swag -v
swag version v1.7.8

make run

# http://localhost:8080/v1/translation/historyにアクセスするとレスポンスが返される
yuto-myuto-m

swagいるかなぁ。試しにやるくらいならちょっとオーバーな気もする。
docker compose up appを使う形に修正で良い気もする。

yuto-myuto-m

MITライセンスなのでLICENSEファイルは残す必要があるぽい。