I'm sending a reply to a request over a chan X
, where X
is a struct. The request is a search operation, so ideally I'd like to be able to return either an X
, or report it wasn't found.
This would be a task for a Maybe X
in Haskell or an x option
in OCaml. Is there any decent way to do this in Go? I'm not returning a pointer (as the original object I'm returning might be modified later), so I can't just return nil
.
Edit: right now I'm making it a chan interface{}
and either sending an X
or nil
, but this is ugly and defeats type-safety.
If you're using interface {}
you're effectively returning a pointer now. Why not change interface {}
to *X
and make sure to return a copy of the object? If I understand your reasoning behind not using a chan *X
, that is.
Another way would be to add an ok bool. You could either add it to X or wrap X, like struct {X; ok bool}
I use the pointer type, where:
Maybe X
= *X
Nothing
= nil
Just x
= &x
I recently needed to represent an optional/maybe of a type where I didn't want to use a pointer and couldn't rely on the zero value. I ended up opting to write the below, which will wrap any type for you. It might fit your use case also.