GoLandでテンプレート中でも補完を効かせる

こんにちは、マネーフォワードケッサイでバックエンドの開発をしているgarsueです。

みなさんGoの開発環境は何を使ってますか? ぼくはVim -> Visual Studio Code -> GoLandと移り変わってきましたが、もう5年位はGoLandで開発しています。

そんなGoLandユーザーのぼくから、GoLandでGo標準のテンプレート1を書く際のちょっと便利な小技をお伝えします。

テンプレート中で補完を効かせる

テンプレートはGoのコードではないため、通常は補完が効きません。 テンプレート中でドット {{ . }} でアクセスできる値の型がわからないためです。

そんなとき、GoLandでは特定の形式のコメントを記述することで対応する型を指定し、補完が効くようにできます。

例えば以下のような型とテンプレートがあるとします。

package models

type Person struct {
	Name string
	Age int
}

Name: {{ .Name }}
Age: {{ .Age }}

このテンプレート中でドットが対応している型は Person です。それを以下のような gotype で始まる特定のコメントで指定してあげます。2

{{- /*gotype: example/models.Person*/ -}}
Name: {{ .Name }}
Age: {{ .Age }}

これでGoLand上ではドットが示す型を認識するようになり、Ctrl + Spaceで補完できるようになります。便利ですね。

コメントを書く位置はドットでアクセスできるスコープの開始直後になります。 {{ with .Foo }} などでスコープを新たに作った場合は再度対応する型を指定してあげましょう。

参考

公式ドキュメントはこちらです。 https://www.jetbrains.com/help/go/integration-with-go-templates.html

GOPATH配下にプロジェクトを置かないと動作しないみたいなことが書かれていますが、そんなことはないので大丈夫です。


  1. https://pkg.go.dev/text/templatehttps://pkg.go.dev/html/template で提供されているGo標準のテンプレート機能で提供されている書式のテキストのことを指しています。 [return]
  2. ここではアプリケーションのモジュール名は example としています。go.modの最初に書くやつです。 [return]