こちらの2014秋のGoConで鵜飼さんのキーノートにあるinterfaceのチェックを使うとすごく捗ります。
という話です。(IntelliJだと捗る話は最後に)
例
こんなinterfaceがあるとする
interface
type BotMessagePlugin interface {
CheckMessage(ctx context.Context, message string) (bool, string)
DoAction(ctx context.Context, message string) bool
}
interfaceの実装
type EchoMessage struct {
}
func (r EchoMessage) CheckMessage(ctx context.Context, message string) (bool, string) {
return true, message
}
func (r EchoMessage) DoAction(ctx context.Context, message string) bool {
plugins.SendMessage(ctx, message)
return true // next ok
}
var _ plugins.BotMessagePlugin = (*EchoMessage)(nil)
interfaceのMethodを増やした場合
go build
でエラーになります。
Hoge()Mehtodを追加
type BotMessagePlugin interface {
Hoge() bool
CheckMessage(ctx context.Context, message string) (bool, string)
DoAction(ctx context.Context, message string) bool
}
interfaceのMethodの引数が変わった場合
これはinterfaceを使ってる箇所でも普通にbuildエラーになると思いますが。
未使用でもチェックできるようになります。
DoActionにhoge引数を追加
type BotMessagePlugin interface {
CheckMessage(ctx context.Context, message string) (bool, string)
DoAction(ctx context.Context, message string, hoge bool) bool
}
IntelliJのDeclarationで実装がわかるようになる
ショートカットキーは、「Preferences」 -> 「keymap」でDeclaration
を探してください。
チェックを入れている箇所、interfaceを定義している箇所、interfaceを使用している箇所が一覧で出てきてかなり捗ります。
(もちろん選択してJump to Sourceできます)
おわり
IntelliJ完全に使いこなしているわけではないので、
他にも良い方法等ありましたら、コメント等いただけると嬉しいです。