On Tue, Jan 19, 2021 at 8:38 PM Ian Lance Taylor <[email protected]> wrote:
>
> On Tue, Jan 19, 2021 at 7:06 PM burak serdar <[email protected]> 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 [email protected].
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.