I think that +Josh Haberman
have a very valid point. Everyone answer the concern: "accidentally implementing an interface will cause a bug". A bigger concern is "not declaring implemented interfaces explicitly hamper readability".
If you look at the go/ast package for example, you'll find a "standard" type hierarchy for where "If is a statement" is implemented by having If struct implementing an annotation-only interface.
This indeed makes it harder to read, and harder to understand.
What really bothers me about +Josh Haberman
's approach for evaluating programming languages, is the methodology of deciding against a language because it has a single bad feature.
People worked successfully with far worse languages, with tools and methodology to mitigate their shortcoming. IMHO the mere features of the language does not correlate to a productivity boost.
Go features a first class standard library, with a clean API. Go put emphasize on top notch developer tools (which other language implemented a profiler so early, and added standard to the GDB). I personally couldn't care less if some detail is wrong in the language design.