概要
GoでAPIを作ることになったので、ライブラリやアーキテクチャの検討をした際のメモ
Web framework
Gin
標準ライブラリのnet/httpでもよかったけど、フレームワークを使って楽できるところはしたかった
その他にもechoやchiなど選択肢は豊富だが、2022/03時点でGinが最も人気が高そうで、触ってみて問題なさそうだったので
API specification
swag
コード内のコメントからSwaggerドキュメントが生成でき、Swagger UIも使えて便利
複数のフレームワークをサポートしてる
こんな感じでドキュメントを生成できる
$ swag init -g main.go
Kubernetes client
client-go
Kubernetesのリソースを操作する要件があったため(これ以外に選択肢ないはず)
Logging
標準のlogを使用
必要があればzapを検討しようと思う
追記:標準パッケージに構造化ロガーが追加された
DI
とりあえず手でfactoryを書こうと思う
しんどくなってきたらwireの導入を検討したい
Configuration
環境変数をstructに変換してくれるライブラリを使用
これも良さそう
Test
gomockの利用を検討したが、こちらの記事を参考に手作りすることにしてみた
Build tool
go build
してdocker build
しているが、koが気になってるところ
パッケージ構成
これが果たして本当にスタンダードなのか怪しいが、他に有力な選択肢もなさそうなのでこれに倣ってみる
追記:公式でドキュメントが出た
アーキテクチャ
保守性を考慮して何らかのアーキテクチャを採用したいが、オニオン・ヘキサゴナル・クリーンアーキテクチャと色々な選択肢がある中で、あまり複雑にはしたくなかったのでシンプルそうなレイヤードアーキテクチャにしてみる
参考