背景
最近会社でGolangのプロジェクトに入りAPIを作成しています。その際にDBのデータを受け取る構造体を作成するのが非常に面倒でした。特に、gormタグの作成が面倒でスキーマに応じて変更する必要があります。
これを手作業で作成している時、先輩にgorm gen
があるから使ってみたらと言われ少し触ってみたのでわかったことを書いていきます。
特定のテーブルのみを作成する
main.go
users := g.GenerateModel("users")
articles := g.GenerateModel("articles")
g.ApplyBasic(users, articles)
g.Execute()
スキーマと異なるテーブル名,カラム名にする
main.go
users := g.GenerateModelAs("users", "changedUsers",
gen.FieldRename("name", "changedName"),
)
g.ApplyBasic(users)
g.Execute()
queryを作成せずにmodelのみを作成する
エラーが出るけど構造体にのみ作成されるようになる
main.go
g := gen.NewGenerator(gen.Config{
Mode: 0, // Create only models
})
modelの作成されるディレクトリを変更する
main.go
g := gen.NewGenerator(gen.Config{
Mode: 0, // Create only models
ModelPkgPath: "./changedDirectory",
})
最後に
現状色々試していて問題点があり参考程度に流すだけで、これを本格的に導入することは無くなりました。
Gen Toolがあったのでそちらも少し触ってみて良さそうだったらまた記事に書いてみます。
不満点
- スキーマがint32の時、swaggerで作成された型不一致するため、int32をintに揃える必要がある。
gen.FieldType
を使用すれば変換できるが全てに書くのが面倒。 - スキーマにコメントが入っている時
// ユーザー名
コメントアウトが追加される。gen.FieldComment
を使用すれば変換できるが全てに書くのが面倒。 - リレーションもジェネレートしてくれると思いきや、書く必要がある。