Interesting. That seems to break the comparable spec. >> Pointer types are comparable. Two pointer values are equal if they point to >> the same variable or if both have value nil. Pointers to distinct zero-size >> variables may or may not be equal.
>> it would be valid for `==` on pointers to zero-sized types to always >> evaluate to `true`, This would be more straightforward behavior. > On Feb 26, 2024, at 9:24 AM, tapi...@gmail.com <tapir....@gmail.com> wrote: > > package main > > var a, b [0]int > var p, q = &a, &b > > func main() { > if (p == q) { > p, q = &a, &b > println(p == q) // false > } > } > > 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 a topic in the Google > Groups "golang-nuts" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/golang-nuts/JBVqWYFdtC4/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/6fc9b600-6707-414c-b19b-e5e14919c5a5n%40googlegroups.com > > <https://groups.google.com/d/msgid/golang-nuts/6fc9b600-6707-414c-b19b-e5e14919c5a5n%40googlegroups.com?utm_medium=email&utm_source=footer>. -- 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/E875D5D3-FFB2-40BA-B930-A10461A2998E%40gmail.com.