概要

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"を指定すれば良い。その他、こちらのタグを参照。