go vetでprintfuncsオプションを使った

go vetコマンドはPrintfのようなメソッドに対してフォーマットで表示する変数の数とその引数の数が一致しない場合(以下参照)にチェックしてくれる。

fmt.Printf("%v, %v\n", "test")

しかし、例えば標準logパッケージをラップするパッケージを作った際に、同様にフォーマットを引数で受け取るメソッド(以下、Debugfメソッド)を定義しても上記と同様のチェックをgo vetコマンドはデフォルトでは行ってくれない。

package testlog

...

func Debugf(format string, v ...interface{}) {
    l.Output(2, fmt.Sprint("[DEBUG] ", fmt.Sprintf(format, v...)))
}

ここで、Debugfメソッドに対しても同様のチェックを行うために-printfuncsオプションを使用する。具体的には以下のようにオプションを設定すればDebugfメソッドに対してもチェックをしてくれる。

go vet -printfuncs Debugf ./...

なお、複数メソッドをオプションに追加したい場合は,で繋ぐといい。