On Tue, Jan 19, 2021 at 8:38 PM Ian Lance Taylor <i...@golang.org> 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) > } > } >
But that breaks the generic function for non-interface types. type Str string func (s Str) String() string {return string(s)} func main() { P(Str("")) } Now the passed parameter is the zero value, but not nil. > 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/CAMV2Rqo61NNVSf_y54rq9-iCDcY%3DjDZk%2Bd3tzy4%3DMX3XL-VZug%40mail.gmail.com.