emahiro/b.log

Drastically Repeat Yourself !!!!

Struct tag の記法を編集する

Go の struct tag の記法を編集する方法を記載します。

IntelliJVSCode の2つでの設定方法を記載しました。

VSCode

https://github.com/fatih/gomodifytagsを使います。

これは VSCode に限らず各種 Editor 向けにに Go の Struct tag の自動生成機能を提供してる便利ライブラリです。(後で知りました。)

How to use

手元に gomodifytags を落としてきます。

go get github.com/fatih/gomodifytags

使い方は Ctrl + Shift + P で Add Tag.. を打つと 自動生成してくれるコマンドが出てきます。

ただ、なぜかこれもデフォルトが snake_case で、しかも omitempty までついてきてしまいます。

フォーマットやデフォルトの omitempty をつけたくないので setting.json に以下を追記します。
各記法については gomodifytags の README に記載してますのでそちらを参考にしてください。

"go.addTags": {
    "tags": "json",
    "options": "json=",
    "promptForTags": false,
    "transform": "camelcase"
},

options の指定の仕方は以下の issue を参考にしました。

github.com

json 以外のタグの指定方法

sqlx などの ORM 系のライブラリを使うケースでは上記の設定に ORM で指定されているタグを指定します。
例えば、sqlx を使う場合には db をカンマつなぎで tags フィールドに追加します。

"go.addTags": {
    "tags": "json,db", // カンマつなぎ
    "options": "",
    "promptForTags": false,
    "transform": "snakecase"
}, 

promptForTags option は add struct tag するときにどのタグを入れるかを GUI で逐一確認してくれる option です。json タグは入れたくないけど db タグは入れたい、みたいなことを struct で個別に設定したいときに便利です。

IntelliJ

IntelliJ はデフォルトの自動 struct tag 補完は snake_case が採用されているのですが、仕事ではほぼ camelCase しか使わないのでなんとか camelCase に変更したいと思ったのが今回のモチベーションです。

詳細は以下のFAQに記載してあります。これをみれば大体OKでした。

https://intellij-support.jetbrains.com/hc/en-us/community/posts/360000525304-camelCase-json-for-Golang-struct-tadsintellij-support.jetbrains.com

以下の順で Go Struct Tags を編集します。