Goで構造体の初期化をするときに「フィールド名なんだっけ?」となることがある。
また、フィールド名を手打ちしてタイポすることもあるだろう。
vim-goを使っている場合、:GoFillStructコマンドで構造体のフィールド初期化を簡単に行うことができる。

TL;DR
- vim-goの
:GoFillStructコマンドを使うと、構造体のフィールド初期化を簡単にできる vim-goのバージョンを1.15以上にする- 構造体の初期化宣言の上にカーソルを合わせて
:GoFillStructコマンドを実行する
vim-goのバージョンを1.15以上にする
まずGoFillStructコマンドを使うにはvim-goのバージョンが1.15以上である必要がある。
FEATURES:
Add :GoFillStruct to fill a struct with all fields; uses fillstruct [GH-1443].
2017/10以前にvim-goをインストールしたままの場合はプラグインのアップデートを行う。
自分の場合はdein.vimを使っているので、以下のコマンドでプラグインのアップデートを行なった。
:call dein#update()
構造体の初期化宣言の上にカーソルを合わせて:GoFillStructコマンドを実行する
:GoFillStruct
Use `fillstruct` to fill a struct literal with default values. Existing
values (if any) are preserved. The cursor must be on the struct you wish
to fill.
vim-goのバージョンが問題ないならば、あとはそのまま利用することができる。
適当に初期化宣言を書いたあとにvimをノーマルモードにしてGoFillStructコマンドを実行する。
カーソルの位置がだいたい構造体の初期化宣言部分に合っていれば全てのフィールドの初期化文がデフォルト値で生成される。
既に一部フィールドの初期化宣言を記載済みでも利用することができる。
実際の動きをキャプチャしたものが以下になる。
Foo構造体とhttp.Client構造体のフィールド初期化をGoFillStructコマンドで行なった。

// Foo has two fields.
type Foo struct {
StringField string
IntField int
}
// Before
func main() {
foo := &Foo{StringField: "test"}
c := &http.Client{}
}
// After GoFillStruct
func main() {
foo := &Foo{
StringField: "test",
IntField: 0,
}
c := &http.Client{
Transport: nil,
CheckRedirect: nil,
Jar: nil,
Timeout: 0,
}
}
終わりに
vim-goで出来る機能はだいたいvim-go Tutorialを読めばわかる。
https://github.com/fatih/vim-go-tutorial
GoFillStructコマンドはTutorialでフォローされていないので今回記事にした。
標準パッケージの構造体でこのコマンドを使うと「あ、これもフィールドで指定できたんだ」と気づくこともあり、一度覚えたあとはかなり多用している。