On Tue, Jan 19, 2021 at 10:02 PM burak serdar <bser...@computer.org> wrote:
>
> As a generic-function writer, I do not know if the argument will be an
> interface or a concrete type. I don't want to check if it is
> zero-value, I want to check if it is nil, because I don't want it to
> panic.

Other people in this thread have made useful comments.  I want to add
that this request doesn't make sense to me.  A generic type has
constraints that describe exactly what operations are permitted for
values of that generic type.  The current proposal provides no way to
write a constraint for "can be compared to nil".  If we could write
such a constraint, then if you used it, that type parameter could not
be instantiated by a numeric type or a string type.  That doesn't seem
clearly useful.

It seems to me that what you are suggesting is something like "if a
type argument is an interface type, then permit comparing with nil."
I don't think that's a useful way to program in a language like Go.
Calling a method on a nil interface value will crash in a reliable and
dependable way, just as dereferencing a nil pointer will crash.  There
is no more need to check for a nil interface value than there is a
need to check for a nil pointer value.

Finally, you can call this if you really must:

func IsNilInterface[T any](v T) bool {
    typ := reflect.TypeOf(&v).Elem()
    if typ.Kind() != reflect.Interface {
        return false
    }
    return reflect.ValueOf(&v).Elem().IsZero()
}

Ian

-- 
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/CAOyqgcVykAqBefafk%3DUF%3D_1sh0U5tjVy12QbJmOzNnXfNzhe8A%40mail.gmail.com.

Reply via email to