我正在通过chan X
发送对请求的回复,其中X
是结构。该请求是一项搜索操作,因此我希望能够返回X
或报告未找到。
这对于Haskell中的Maybe X
或OCaml中的x option
来说是一项任务。在Go中有什么好的方法吗?我没有返回指针(因为我正在返回的原始对象可能会在稍后修改),所以我不能只返回nil
。
修改:我现在正在制作一个chan interface{}
并发送X
或nil
,但这很难看并且打败了类型安全
答案 0 :(得分:8)
我使用指针类型,其中:
Maybe X
= *X
Nothing
= nil
Just x
= &x
答案 1 :(得分:3)
如果您正在使用interface {}
,那么您现在可以有效地返回指针。为什么不将interface {}
更改为*X
并确保返回对象的副本?如果我理解你不使用chan *X
背后的原因,那就是。
答案 2 :(得分:3)
另一种方法是添加一个ok bool。你可以将它添加到X或包装X,如struct {X; ok bool}
答案 3 :(得分:2)
我最近需要表示一个可选/可能的类型,我不想使用指针而不能依赖零值。我最终选择写下面的内容,它会为你包装任何类型。它也可能适合您的用例。