2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

xoで生成するstructに任意のfieldをつける

Posted at

小ネタです。

背景

golangでDBのスキーマからコード生成する際に、xoというものがあります。

例えばmysqlに接続してコード生成する場合は

xo schema  mysql://docker:docker@127.0.0.1:3306/{dbname} --out domain/model/dbschema/

とかやると、テーブルごとにいい感じにコードが生成されます。
しかしデフォルトではstruct fieldsには json しか定義されていません。
sqlx 使って row.StructScan(&hoge) とかやりたいなと思った時に不便です。
そこで、db field も出力出来るようにします。

やり方

--go-field-tag オプションを指定します。
※このオプションはつい最近(2021/6/11) 実装されたものなので、適宜xoをアップデートしてください。

xo schema  mysql://docker:docker@127.0.0.1:3306/{dbname} --out domain/model/dbschema/  --go-field-tag='`json:"{{ .SQLName }}" db:"{{ .SQLName }}"`'

備考

テンプレについて

おまじないのように書いた json:"{{ .SQLName }}" db:"{{ .SQLName }}" は、
ここで指定されています。
きっと他にも展開できる変数が有るのだと思いますが、未調査です。

mysql:8について

その他xoのハマりどころとして、現時点では mysql:8 に接続してコード生成した場合、
auto_incrementなカラムの Insert() が そのカラムも指定必須になってしまいます。
ですのでコード生成時には mysql:5 に一旦落としてあげると良いです。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?