Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 16278] ファイルの概要

このコミットは、Go言語の公式ドキュメントである effective_go.html におけるインターフェースの命名規約に関する記述を修正し、より包括的なガイドラインを提供するものです。特に、1つのメソッドを持つインターフェースの命名について、従来の「-er」サフィックスに加えて、「エージェント名詞を構築するための同様の変更」も許容するよう記述が更新されました。

コミット

  • コミットハッシュ: 2f326da27e61194320cf925b1e2362603d9306b3
  • 作者: Rob Pike r@golang.org
  • 日付: 2013年5月7日 11:41:36 -0700
  • コミットメッセージ:
    effective_go.html: be more accepting in the guidelines for interface names
    Fixes #5421.
    
    R=golang-dev, bradfitz, adg
    CC=golang-dev
    https://golang.org/cl/9274043
    

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/2f326da27e61194320cf925b1e2362603d9306b3

元コミット内容

effective_go.html: be more accepting in the guidelines for interface names
Fixes #5421.

R=golang-dev, bradfitz, adg
CC=golang-dev
https://golang.org/cl/9274043

変更の背景

Go言語では、インターフェースの命名規約として、特に単一のメソッドを持つインターフェースに対して、そのメソッド名に -er サフィックスを付けて命名することが慣例とされています(例: Read メソッドを持つインターフェースは Reader)。これは effective Go ドキュメントにも明記されていました。

しかし、この厳密な記述が、一部のインターフェース名(例: CloseNotifier)のような、直接的な -er サフィックスではないが、機能的に「〜する者」というエージェント名詞の役割を果たす命名パターンを包含しきれていないという問題がありました。コミットメッセージにある Fixes #5421 は、この命名規約の記述が不十分であるという内部的な議論や報告(Issue 5421)に対応したものであると考えられます。この変更は、Goコミュニティにおけるインターフェース命名の多様性と実用性をより正確に反映し、開発者がより柔軟かつ直感的な命名を行えるようにするためのものです。

前提知識の解説

Go言語のインターフェース

Go言語のインターフェースは、メソッドのシグネチャの集合を定義する型です。Goのインターフェースの最大の特徴は、型がそのインターフェースのすべてのメソッドを実装していれば、明示的にインターフェースを実装すると宣言する必要がない「暗黙的な実装」である点です。これにより、コードの結合度が低くなり、柔軟な設計が可能になります。

特に、Goでは単一のメソッドを持つインターフェースが頻繁に利用されます。これは、そのメソッドが提供する特定の振る舞いを抽象化するために用いられ、例えば io.Readerio.Writer などがその代表例です。

Goの命名規約と effective Go

effective Go は、Go言語で効果的かつ慣用的なプログラミングを行うためのガイドラインをまとめた公式ドキュメントです。Go言語の設計思想やベストプラクティスが記されており、命名規約もその重要な一部です。

Goの命名規約では、変数名、関数名、型名など、様々な要素に対して推奨されるスタイルが示されています。インターフェースの命名についても、単一メソッドインターフェースにはメソッド名に -er を付けて「〜する者」という意味合いを持たせる慣例が強く推奨されてきました。例えば、Read メソッドを持つインターフェースは ReaderWrite メソッドを持つインターフェースは Writer といった具合です。これは、そのインターフェースがどのような「能力」を持つか、あるいはどのような「役割」を果たすかを直感的に理解させるためのものです。

技術的詳細

このコミットの技術的な変更は、doc/effective_go.html ファイル内のインターフェース命名に関する記述の微調整です。具体的には、単一メソッドインターフェースの命名規約について、従来の「メソッド名に -er サフィックスを付ける」という表現を、より広範な解釈を許容するように変更しています。

変更前は、以下のように記述されていました。 By convention, one-method interfaces are named by the method name plus the -er suffix: Reader, Writer, Formatter etc. (慣例として、1つのメソッドを持つインターフェースは、メソッド名に -er サフィックスを付けて命名されます: Reader, Writer, Formatter など。)

このコミットにより、この記述が以下のように変更されました。 By convention, one-method interfaces are named by the method name plus an -er suffix or similar modification to construct an agent noun: Reader, Writer, Formatter, CloseNotifier etc. (慣例として、1つのメソッドを持つインターフェースは、メソッド名に -er サフィックス、またはエージェント名詞を構築するための同様の変更を加えて命名されます: Reader, Writer, Formatter, CloseNotifier など。)

この変更のポイントは、「or similar modification to construct an agent noun(またはエージェント名詞を構築するための同様の変更)」というフレーズが追加されたことです。これにより、-er サフィックスが直接適用できない場合でも、そのインターフェースが「〜する者」という役割を果たすことを示すエージェント名詞として機能する命名であれば許容されるという柔軟性が導入されました。

また、具体的な例として CloseNotifier が追加されています。CloseNotifierCloseNotify メソッドを持つインターフェースであり、これは直接 -er サフィックスが付いているわけではありませんが、「クローズを通知する者」という意味合いを持つエージェント名詞として機能します。この例の追加は、新しいガイドラインの意図を明確に示しています。

コアとなるコードの変更箇所

diff --git a/doc/effective_go.html b/doc/effective_go.html
index 227659ef4c..1b3168683a 100644
--- a/doc/effective_go.html
+++ b/doc/effective_go.html
@@ -403,8 +403,10 @@ if owner != user {
 
 <p>
 By convention, one-method interfaces are named by
-the method name plus the -er suffix: <code>Reader</code>,
-<code>Writer</code>, <code>Formatter</code> etc.
+the method name plus an -er suffix or similar modification
+to construct an agent noun: <code>Reader</code>,
+<code>Writer</code>, <code>Formatter</code>,
+<code>CloseNotifier</code> etc.
 </p>
 
 <p>

コアとなるコードの解説

上記の diff は、doc/effective_go.html ファイルの403行目から408行目にかけての変更を示しています。

  • - で始まる行は削除された元の記述です。

    the method name plus the -er suffix: <code>Reader</code>,
    <code>Writer</code>, <code>Formatter</code> etc.
    

    ここでは、単一メソッドインターフェースの命名が「メソッド名に -er サフィックスを付ける」と明記され、例として Reader, Writer, Formatter が挙げられています。

  • + で始まる行は追加された新しい記述です。

    the method name plus an -er suffix or similar modification
    to construct an agent noun: <code>Reader</code>,
    <code>Writer</code>, <code>Formatter</code>,
    <code>CloseNotifier</code> etc.
    

    新しい記述では、「an -er suffix or similar modification to construct an agent noun(-er サフィックス、またはエージェント名詞を構築するための同様の変更)」という表現が追加されています。これにより、命名規約の解釈が広がり、より柔軟な命名が可能になりました。また、例として CloseNotifier が追加され、この新しい解釈の具体例が示されています。

この変更は、Go言語のインターフェース命名規約が、厳密な -er サフィックスの適用だけでなく、そのインターフェースが果たす「役割」や「能力」をエージェント名詞として表現する幅広いパターンを許容することを示唆しています。これは、言語の進化とコミュニティの慣習をドキュメントに反映させるための重要な更新です。

関連リンク

参考にした情報源リンク

  • コミットデータ: /home/orange/Project/comemo/commit_data/16278.txt
  • GitHubコミットページ: https://github.com/golang/go/commit/2f326da27e61194320cf925b1e2362603d9306b3
  • Go言語のインターフェースに関する一般的な知識
  • Go言語の命名規約に関する一般的な知識
  • Web検索 (golang issue 5421) - 直接的なIssueは見つからなかったが、コミットの背景を推測するのに役立った。