概要
gormでは、structを定義するとそれをDatabaseのテーブル定義にマッピングしてくれる。こちらを参考にstructのtagの定義方法を確認する。
環境
バージョンは gorm.io/gorm v1.25.10で確認した。利用したDBはMySQL互換のTiDBで試した。(5.7.28-TiDB-v7.1.3-serverless)
構造体の定義
例えば、構造体を以下のように定義する。
type User struct {
ID string `gorm:"primaryKey;type:VARCHAR(36);column:id"`
FirstName string `gorm:"not null;column:first_name"`
LastName string `gorm:"not null;column:last_name"`
Note string `gorm:"column:note"`
CreatedAt time.Time `gorm:"not null;column:created_at"`
UpdatedAt time.Time `gorm:"not null;column:updated_at"`
}実際のテーブルはusersと複数形かつ小文字となり、フィールド定義は以下になる。
+---------------+-------------+------+------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+------+---------+-------+
| id | varchar(36) | NO | PRI | NULL | |
| first_name | longtext | NO | | NULL | |
| last_name | longtext | NO | | NULL | |
| note | longtext | YES | | NULL | |
| created_at | datetime(3) | NO | | NULL | |
| updated_at | datetime(3) | NO | | NULL | |
+---------------+-------------+------+------+---------+-------+fieldの名前は gorm:"column:field_name" のfield名になるか、Goの変数名をsnake_caseにしたものに変更となる。Primary Keyには、gorm:"primaryKey"をつける。CreatedAtとUpdatedAtのような時刻の変数は、自動的に現在時刻でレコードを作成もしくは更新される。NOT NULLやAUTO INCREMENTなどを付与したい場合は、gorm:"not null;column:field_name"を指定すれば良い。その他、こちらのタグを参照。