Commit 2fcb25e0 authored by Bryan C. Mills's avatar Bryan C. Mills Committed by Bryan Mills

doc/effective_go: clarify advice on returning interfaces

New Gophers sometimes misconstrue the advice in the "Generality" section
as "export interfaces instead of implementations" and add needless
interfaces to their code as a result.  Down the road, they end up
needing to add methods and either break existing callers or have to
resort to unpleasant hacks (e.g. using "magic method" type-switches).

Weaken the first paragraph of this section to only advise leaving types
unexported when they will never need additional methods.

Change-Id: I32a1ae44012b5896faf167c02e192398a4dfc0b8
Reviewed-on: https://go-review.googlesource.com/24892Reviewed-by: default avatarRob Pike <r@golang.org>
Reviewed-by: default avatarAndrew Gerrand <adg@golang.org>
parent a1110c39
...@@ -2238,13 +2238,12 @@ if str, ok := value.(string); ok { ...@@ -2238,13 +2238,12 @@ if str, ok := value.(string); ok {
<h3 id="generality">Generality</h3> <h3 id="generality">Generality</h3>
<p> <p>
If a type exists only to implement an interface If a type exists only to implement an interface and will
and has no exported methods beyond that interface, never have exported methods beyond that interface, there is
there is no need to export the type itself. no need to export the type itself.
Exporting just the interface makes it clear that Exporting just the interface makes it clear the value has no
it's the behavior that matters, not the implementation, interesting behavior beyond what is described in the
and that other implementations with different properties interface.
can mirror the behavior of the original type.
It also avoids the need to repeat the documentation It also avoids the need to repeat the documentation
on every instance of a common method. on every instance of a common method.
</p> </p>
...@@ -3665,4 +3664,3 @@ var _ image.Color = Black ...@@ -3665,4 +3664,3 @@ var _ image.Color = Black
var _ image.Image = Black var _ image.Image = Black
</pre> </pre>
--> -->
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment