Absolutely a bug. On Thursday, February 22, 2024 at 6:55:49 PM UTC+8 Brien Colwell wrote:
> I'm confused by this output. It appears that the interface of two > different pointers to an empty struct are equal. In all other cases, > interface equality seems to be the pointer equality. What's going on in the > empty struct case? > > ``` > package main > > import "fmt" > > type Foo struct { > } > > func (self *Foo) Hello() { > } > > type FooWithValue struct { > A int > } > > func (self *FooWithValue) Hello() { > } > > type Bar interface { > Hello() > } > > func main() { > a := &Foo{} > b := &Foo{} > fmt.Printf("%t\n", *a == *b) > fmt.Printf("%t\n", a == b) > fmt.Printf("%t\n", Bar(a) == Bar(b)) > > c := &FooWithValue{A: 1} > d := &FooWithValue{A: 1} > fmt.Printf("%t\n", *c == *d) > fmt.Printf("%t\n", c == d) > fmt.Printf("%t\n", Bar(c) == Bar(d)) > } > ``` > > Prints (emphasis added on the strange case): > > ``` > true > false > **true** > true > false > false > ``` > > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/69182541-008d-46c6-b75c-0c8472026e32n%40googlegroups.com.