🔥
sqlboilerで自動生成するGoの型を任意の物に起きかえる
例えば
CREATE TABLE `Post` (
id VARCHAR(255) NOT NULL,
title VARCHAR(255) NOT NULL,
text TEXT NOT NULL,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
PRIMARY KEY (id),
);
のようなテーブルが存在していた場合、生成されるGoの構造体は以下のようになる。
Post.go
type Post struct {
ID string `boil:"id" json:"id" toml:"id" yaml:"id"`
Title string `boil:"title" json:"title" toml:"title" yaml:"title"`
Text string `boil:"text" json:"text" toml:"text" yaml:"text"`
CreatedAt time.Time `boil:"created_at" json:"created_at" toml:"created_at" yaml:"created_at"`
UpdatedAt time.Time `boil:"updated_at" json:"updated_at" toml:"updated_at" yaml:"updated_at"`
R *postR `boil:"-" json:"-" toml:"-" yaml:"-"`
L postL `boil:"-" json:"-" toml:"-" yaml:"-"`
}
設定ファイルに下記のように追記
sqlboiler.toml
[[types]]
[types.match]
tables = ["Post"] # 対象のテーブル、省略した場合は全てのテーブル
name = "id" # 対象のカラム
[types.replace]
type = "uuid.UUID" # 設定したい型
[types.imports]
third_party = ['"github.com/google/uuid"'] # 設定したい型に必要なパッケージ
sqlboilerによって生成される構造体は以下のようになる
Post.go
type Post struct {
ID uuid.UUID `boil:"id" json:"id" toml:"id" yaml:"id"`
Title string `boil:"title" json:"title" toml:"title" yaml:"title"`
Text string `boil:"text" json:"text" toml:"text" yaml:"text"`
CreatedAt time.Time `boil:"created_at" json:"created_at" toml:"created_at" yaml:"created_at"`
UpdatedAt time.Time `boil:"updated_at" json:"updated_at" toml:"updated_at" yaml:"updated_at"`
R *postR `boil:"-" json:"-" toml:"-" yaml:"-"`
L postL `boil:"-" json:"-" toml:"-" yaml:"-"`
}
ID
の型がuuid.UUID
に変わっていることが分かる。
他にもsqlboilerのmatchには他にも様々な設定が出来る
sqlboiler.toml
[[types]]
[types.match]
tables = ["Post"] # 対象のテーブル、省略した場合は全てのテーブル
name = "id" # 対象のカラム
type = "int" # 生成後の型
db_type = "int" # 元の型
nullable = false # nullを許容しているか否か
Discussion