Developer tools as module dependencies
テーマ:全ての開発者が同一バージョンの開発ツールを使えるようにする。
やること
mainパッケージを含むモジュールを作る
依存にstringerというツールを追加する
go:generate命令でstringerを使う
stringerで何が嬉しいか
stringerは、fmt.Stringerインタフェースを満たすメソッドの作成を自動化するツール。
ツールへの依存性を追加する
Go modulesにはツール依存性を記述する慣習的方法がある。
単にコマンドをimportする。ただし、全てのgoビルドコマンドに無視される特別なファイルにおいて行う。そのファイル名は、慣習的にtools.goと名付けられる。
code:tools.go
// +build tools
package tools
import (
_ "golang.org/x/tools/cmd/stringer"
)
このファイルは、
// +build toolsでbuild constraintを宣言している。これによりgoコマンドはtoolsビルドタグが与えられない限りこのファイルを無視する。 tools.goがtoolsパッケージに属することを宣言している。このtoolsという名前は慣習によるもの。同一ディレクトリにmainをおいてもこのファイルは無視されるので問題ない。
"golang.org/x/tools/cmd/stringer"をimportしている。
go:generateでstingerを使う