LoginSignup
7
3

gorm gen を使用してデータベースから構造体を作成する

Last updated at Posted at 2024-01-25

背景

最近会社で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を使用すれば変換できるが全てに書くのが面倒。
  • リレーションもジェネレートしてくれると思いきや、書く必要がある。
7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3