// run // Copyright 2014 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "fmt" ) type Foo int64 func (f *Foo) F() int64 { return int64(*f) } type Bar int64 func (b Bar) F() int64 { return int64(b) } type Baz int32 func (b Baz) F() int64 { return int64(b) } func main() { foo := Foo(123) f := foo.F if foo.F() != f() { bug() fmt.Println("foo.F", foo.F(), f()) } bar := Bar(123) f = bar.F if bar.F() != f() { bug() fmt.Println("bar.F", bar.F(), f()) // duh! } baz := Baz(123) f = baz.F if baz.F() != f() { bug() fmt.Println("baz.F", baz.F(), f()) } } var bugged bool func bug() { if !bugged { bugged = true fmt.Println("BUG") } }