20229


Goのinterfaceの語尾に"-er"を付けることが多い事に理由はあるのでょうか？

例えばStringメソッドを持つStringerはStringable等の名前では無いことに、Goの思想はあるのでしょうか？


CC BY-SA 4.0
2015-12-20T08:53:24.783
20210
2020-07-31T06:55:14.623
2020-07-31T06:55:14.623
3060
13747
question
go
Go の interface の語尾に "-er" を付ける事が多いのはなぜ？


Javaだとよく-ableを使いますが、別言語ですので、それにあまりひっぱられ過ぎないほうがよいと思います。

コメントにもあります通り

  * [doc: Effective Go: clarify interface naming conventions · Issue #5421 · golang/go](https://github.com/golang/go/issues/5421)

> Clarifying that proper English agent nouns are preferred would be helpful.

と下記参考になると思います。

  * [Interface naming convention -er vs. -or - Google Groups](https://groups.google.com/forum/#!msg/Golang-Nuts/8xnggK1wo0U/7TF01pO3D6AJ)

> Proper English is always preferable.

  

> Also, the convention is to use -er for interfaces with just a  
>  single method, not for all interfaces, and it works best when  
>  the method name is a verb. You take the method name and  
>  add -er to form a noun.

  * [単語力アップ！語尾に「able」を付けると？ | オンライン英会話ガイド](http://xn--eckaqj0mnhrcc5850eyl2fqira.com/phrase/intermediate/able.html)

>
> まず、「〇〇able」とする事ができる動詞として、先ほど紹介したように“動詞”が挙げられるのですが、その動詞の中でも「他動詞」にしか語尾に「able」を付ける事ができません。

  

>
> 次に、「able」を語尾に付ける事ができる物として「名詞」がありますが、例えば「結婚」と言う意味を持つ「marriage」の語尾に「able」を付け加えて「marriageable」とすると、「婚期に達した、年ごろの」と言う意味の「形容詞」になります。

## まとめ

ableは動詞では **他動詞** につけるものです。  
-erをつけるほうが、ableをつけるより自然な英語になる場面が多いのではないでしょうか。  
また-erは **名詞化** するのに使われているようです。 -ableだと形容詞化してしまうのかな。


CC BY-SA 3.0
2015-12-20T15:34:16.773
20226
2015-12-21T00:29:43.273
2020-06-17T08:14:45.997
-1
9008
20210
answer


格納するデータの役割(Role)を明示する為ですが、golang では一般的に役割に er を付ける事が多いです。  
例えば Read 出来て、Close も出来るのであれば ReadCloser となります。  
ちなみに

<http://www.carlopescio.com/2011/04/your-coding-conventions-are-hurting-
you.html>

この記事に

  * the -er suffix
  * the -able suffix
  * the -Object suffix
  * the I- prefix

について書かれていますが、-able については当てつけっぽく実際何をやるのかが分かりづらい、-Object は MarshalByObject
等の様にバッティングの可能性がある、I- は List が IList じゃないのに矛盾してるよね、といった事が書かれています。


CC BY-SA 3.0
2015-12-20T15:50:05.100
20229
2015-12-20T15:50:05.100
440
20210
answer