On Tue, 2021-01-19 at 19:38 -0800, Ian Lance Taylor wrote:
> On Tue, Jan 19, 2021 at 7:06 PM burak serdar <bser...@computer.org>
> wrote:
> > 
> > In the following program, it is valid to pass an interface to
> > function P:
> > 
> > func P[T fmt.Stringer](x T) {
> >      fmt.Println(x)
> > }
> > 
> > func main() {
> >   var v fmt.Stringer
> >   P(v)
> > }
> > 
> > However, there is no way for P to check if x is nil. This does not
> > compile:
> > 
> > func P[T fmt.Stringer](x T) {
> >      if x!=nil {
> >         fmt.Println(x)
> >     }
> > }
> > 
> > Is it possible to write a generic function that can test if its
> > argument with a constraint is nil?
> 
> For an interface type the value "nil" is the zero value of the type,
> so this is the general zero value issue mentioned at
> 
https://go.googlesource.com/proposal/+/refs/heads/master/design/go2draft-type-parameters.md#the-zero-value
> 
> You can write
> 
> func P[T fmt.Stringer](x T) {
>      var zero T
>      if x!=zero {
>         fmt.Println(x)
>     }
> }
> 
> Ian

Would that work for non-comparable types? Say the T has an underlying
[]int type, then the comparison is not against nil and you end up with
a panic.


-- 
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/39dcaaa172cd6850c7d55b3e7330585c6060bc87.camel%40kortschak.io.

Reply via email to