読者です 読者をやめる 読者になる 読者になる

Pick me up!

デジタルガジェットとかプログラミング

golangのinterfaceでハマった

結論

golangのinterfaceで定義するメソッド名は大文字で始めること。

どんなコードでハマったのか

インタフェースを実装する2つ以上のstructがあります。

type MyFilter interface {
  filtering(string) string
}
type AFilter struct {/*省略*/}
func (f Afilter) filtering(string) string { /*省略*/}
type BFilter struct {/*省略*/}
func (f Bfilter) filtering(string) string { /*省略*/}

インタフェースの配列として

var source = "aaabbb"
filters := filter_builder() // 不定個数のフィルターを作って[]MyFilterに入れる
for _, filter := range filters {
  source = filter.filtering(source) //一つづつフィルタリング
  //ここで、filteringなんてしらねーぜ!と言われてしまう
}

散々悩んだ挙句、A Toru of Goをみたら、インタフェースのメソッドは大文字で始まっていたので、もしや!と思ってfiltering→Filteringのように大文字で初めて見たら無事に通るようになりました。

教訓

  • ちゃんとリファレンスを読む
  • オフィシャルのサンプルコードのネーミングルールは真似するべき