1
0
mirror of https://github.com/golang/go synced 2024-11-23 22:00:11 -07:00
The Go programming language
Go to file
Robert Griesemer 2c83f1eaf9 spec: explicitly disallow blank methods in interface types
The spec was unclear about whether blank methods should be
permitted in interface types. gccgo permits at most one, gc
crashes if there are more than one, go/types permits at most
one.

Discussion:

Since method sets of non-interface types never contain methods
with blank names (blank methods are never declared), it is impossible
to satisfy an interface with a blank method.

It is possible to declare variables of assignable interface types
(but not necessarily identical types) containing blank methods, and
assign those variables to each other, but the values of those
variables can only be nil.

There appear to be two "reasonable" alternatives:

1) Permit at most one blank method (since method names must be unique),
and consider it part of the interface. This is what appears to happen
now, with corner-case bugs. Such interfaces can never be implemented.

2) Permit arbitrary many blank methods but ignore them. This appears
to be closer to the handling of blank identifiers in declarations.
However, an interface type literal is not a declaration (it's a type
literal). Also, for struct types, blank identifiers are not ignored;
so the analogy with declarations is flawed.

Both these alternatives don't seem to add any benefit and are likely
(if only slightly) more complicated to explain and implement than
disallowing blank methods in interfaces altogether.

Fixes #6604.

LGTM=r, rsc, iant
R=r, rsc, ken, iant
CC=golang-codereviews
https://golang.org/cl/99410046
2014-05-22 12:23:25 -07:00
api api: update next.txt 2014-05-15 19:30:09 -04:00
doc spec: explicitly disallow blank methods in interface types 2014-05-22 12:23:25 -07:00
include liblink: fix field tracking 2014-05-20 00:30:58 -04:00
lib lib/time/zoneinfo.zip: update to IANA release 2014c 2014-05-16 22:06:37 +00:00
misc cmd/ld: really import runtime/cgo for external link 2014-05-20 21:36:50 -07:00
src cmd/cgo: explicitly state that #cgo directives across multiple files are concatenated 2014-05-21 16:01:54 -07:00
test test: fix two typos in float_lit2.go 2014-05-21 17:19:12 -04:00
.hgignore lib9: enable on Plan 9 2014-02-13 20:06:41 +01:00
.hgtags tag go1.3beta1 and go1.3beta2 2014-05-21 13:23:24 +10:00
AUTHORS A+C: Pietro Gagliardi (individual CLA) 2014-05-21 16:01:41 -07:00
CONTRIBUTORS A+C: Pietro Gagliardi (individual CLA) 2014-05-21 16:01:41 -07:00
favicon.ico
LICENSE
PATENTS
README README: Fix installation instructions 2013-11-20 13:47:37 -08:00
robots.txt

This is the source code repository for the Go programming language.  

For documentation about how to install and use Go,
visit http://golang.org/ or load doc/install-source.html
in your web browser.

After installing Go, you can view a nicely formatted
doc/install-source.html by running godoc --http=:6060
and then visiting http://localhost:6060/doc/install/source.

Unless otherwise noted, the Go source files are distributed
under the BSD-style license found in the LICENSE file.

--

Binary Distribution Notes

If you have just untarred a binary Go distribution, you need to set
the environment variable $GOROOT to the full path of the go
directory (the one containing this README).  You can omit the
variable if you unpack it into /usr/local/go, or if you rebuild
from sources by running all.bash (see doc/install.html).
You should also add the Go binary directory $GOROOT/bin
to your shell's path.

For example, if you extracted the tar file into $HOME/go, you might
put the following in your .profile:

    export GOROOT=$HOME/go
    export PATH=$PATH:$GOROOT/bin

See doc/install.html for more details.