Closed
Description
What version of Go are you using (go version
)?
$ go version go version go1.14.2 linux/amd64
Does this issue reproduce with the latest release?
yes
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/home/user/.cache/go-build" GOENV="/home/user/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/user" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/home/user/src/golang.org/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/home/user/src/golang.org/go/pkg/tool/linux_amd64" GCCGO="/usr/bin/gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build436707887=/tmp/go-build -gno-record-gcc-switches"
What did you do?
https://play.golang.org/p/lNId1c5z_Dk
cat <<EOF > hello.go
package main
import (
"fmt"
"io"
)
type Bar interface {
Bark()
Meow()
}
type Foo struct {
}
func (*Foo) Bark() {
fmt.Println("Bark")
}
func (*Foo) Meow() {
fmt.Println("Meow")
}
func baz(v Bar) {
v.Bark()
}
func main() {
x := &Foo{}
baz(x)
}
EOF
$ go build hello.go
$ nm hello | grep Meow
00000000004915c0 T main.(*Foo).Meow
00000000004da690 R main.(*Foo).Meow.stkobj
What did you expect to see?
nm hello | grep Meow
should output nothing.
What did you see instead?
$ nm hello | grep Meow
00000000004915c0 T main.(*Foo).Meow
00000000004da690 R main.(*Foo).Meow.stkobj
Gccgo has the remaining Meow
too. But tinygo successfully removes the method.
Also found https://aykevl.nl/2018/12/tinygo-interface, which might be of interest.