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.

Reply via email to