On Wed, Jan 18, 2023 at 5:14 PM 'Christian Stewart' via golang-nuts <
golang-nuts@googlegroups.com> wrote:

> The thing I ran into with this today was, if you want to compare two
> interfaces:
>
> var foo1 Thing
> var foo2 Thing
>
> Ordinarily you can do foo1 == foo2 and it does pointer-wise comparison.
>

No, it does not. Consider the following example. Do all three vars have the
same address?

    package main

    type Thing struct{}

    var foo1 Thing

    func main() {
        var foo2 Thing
        var foo3 Thing
        println(foo1 == foo2, &foo1, &foo2)
        println(foo2 == foo3, &foo2, &foo3)
    }

The output will probably surprise you. See
https://go.dev/ref/spec#Comparison_operators. An empty struct is handled
thusly:

   - Struct values are comparable if all their fields are comparable. Two
   struct values are equal if their corresponding non-blank
   <https://go.dev/ref/spec#Blank_identifier> fields are equal.

Obviously, depending on how "Thing" is defined the results may be
different. Perhaps you are thinking of the case where "Thing" is an
interface.

But in a generic function, as an example:
>
> // IsEmpty checks if the interface is equal to nil.
> func IsEmpty[T Block](blk Block) bool {
>     var empty T
>     return empty == blk
> }
>
> ... that doesn't work due to the errors mentioned in this thread. And
> I can't make the type constraint comparable either, that doesn't seem
> to work.
>
> On Wed, Jan 18, 2023 at 4:59 PM burak serdar <bser...@computer.org> wrote:
> >
> >
> >
> > On Wed, Jan 18, 2023 at 5:52 PM Andrew Athan <andrew...@gmail.com>
> wrote:
> >>
> >> (Possibly related to issues such as those discussed in
> https://groups.google.com/g/golang-nuts/c/pO2sclKEoQs/m/5JYjveKgCQAJ ?)
> >>
> >> If I do:
> >>
> >> ```
> >> func Foo[V any](v V)bool {
> >>   return v==v
> >> }
> >> ```
> >>
> >> golang 1.19 reports:
> >>
> >> ```
> >> invalid operation: v == v (incomparable types in type set)
> >> ```
> >>
> >> There are two issues with this in my mind: (1) It is ambiguous in that
> I cannot be sure, as a new user, whether what's being indicated is an
> incompatibility between the actual types on either side of the equality
> test or between the set of possible types that COULD be on either side of
> the equality test due to V's any type constraing in either the case where
> the left and right side are same or different types (2) In this case, the
> type V appears to be determinable at compile time and yet it is claimed
> this equality test is in some way problematic.
> >>
> >> I'm sure I'm misunderstanding something about golang generics.
> >>
> >> Can someone comment on this?
> >>
> >> Thanks in advance :)
> >
> >
> >
> > The problem here is that a type constraint is different from a type, but
> the same identifier is overloaded in the language so "any" as a type
> constraint means something else from "any" as a type.
> >
> > The error is there, because without that Foo([]string{}) would satisfy
> the constraint but it is still a compile error. Foo[V comparable)(v V) bool
> is the correct declaration.
> >
> >>
> >>
> >> --
> >> 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/7134400e-ed5e-4c9f-bacd-4b739daf0e0bn%40googlegroups.com
> .
> >
> > --
> > 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/CAMV2Rqo_nrhZfvJ_9qykTkg%3DTxbgdZMC7zFHx1rNnGcdgQk8cA%40mail.gmail.com
> .
>
> --
> 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/CA%2Bh8R2pDwa0ygGvcZwV-2aa3zhtVqZoZ9YPiFRFmBmF7JsKzqg%40mail.gmail.com
> .
>


-- 
Kurtis Rader
Caretaker of the exceptional canines Junior and Hank

-- 
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/CABx2%3DD_HJQGCg8xo2yU%3DahnQD%3DqiUA-08ZHhNu9-XUmc0Jeu7Q%40mail.gmail.com.

Reply via email to