The behavior of Go 1.9 or 1.10 is even more weird. They make the following code print false. ;D
package main type T struct {} func main() { var a, b = &T{}, &T{} println(a == b || a != b) } On Sunday, February 25, 2024 at 4:30:22 PM UTC+8 tapi...@gmail.com wrote: > 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/e4429119-5c91-44d1-93c4-dc877efdd7b9n%40googlegroups.com.