GORMを使用するときに行ったこと

  • 論理削除をやめる
  • AutoMigrateを使わないようにする
  • Rails(Ruby)のdatabase_cleaner gemのようなものを準備する
  • 接続用の関数を用意する ってことをやりました。

Qrunchに記載した、下記のログをまとめたものです。

論理削除をやめる

gorm.Modelを埋め込みで使用すると、DeletedAtがついてきて、論理削除を行うようになってしまうので、下記のような構造体を作成してプロジェクト内で使用するようにしました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package models  

import "time"  

// Model struct  
type Model struct {  
    ID        uint `gorm:"primary_key"`  
    CreatedAt time.Time  
    UpdatedAt time.Time  
} 

この構造体を埋め込みで使用することで、Railsのモデルと同じような感じでIDとCreatedAtとUpdatedAtが入るようになります。

AutoMigrateを使わないようにする。

既存のカラムの型変更やカラムの削除ができないため、 sqldef を使うようにしました。

Rails(Ruby)のdatabase_cleaner gemのようなものを準備する

cleaner のコードを利用させてもらいました。
使ったことはないが、dbcleanerのがよいかもしれないです。

接続用の関数を用意する

テストのときに接続先を変えて使ったりするので、下記のような関数を用意して使ってました。
データベースへの接続に書かれている部分に注意して設定する必要があります。 charsetやparseTime、hostの指定について注意する必要があります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// ConnectGorm func  
func ConnectGorm(dbUser, dbPassword, dbHost, dbName string) *gorm.DB {  
    connectTemplate := "%s:%s@%s/%s"  

    connect := fmt.Sprintf(  
        connectTemplate,  
        dbUser,  
        dbPassword,  
        dbHost,  
        dbName,  
    )  

    db, err := gorm.Open("mysql", connect+"?charset=utf8mb4&parseTime=True")  

    if err != nil {  
        panic(fmt.Sprintf("can't connect database: %s", err))  
    }  

    return db  

}  

終わりに

revelの開発が止まってしまっているのが悲しいところ。
否定する人がいるかもしれないが、個人的には、Railsに近い諸々はじめから用意されているデファクトスタンダードのフレームワークがほしいところ。

Built with Hugo
テーマ StackJimmy によって設計されています。