在Go中有一种模拟“可能”或“选项”类型的好方法吗?

时间:2012-04-03 12:23:38

标签: types go nullable

我正在通过chan X发送对请求的回复,其中X是结构。该请求是一项搜索操作,因此我希望能够返回X或报告未找到。

这对于Haskell中的Maybe X或OCaml中的x option来说是一项任务。在Go中有什么好的方法吗?我没有返回指针(因为我正在返回的原始对象可能会在稍后修改),所以我不能只返回nil

修改:我现在正在制作一个chan interface{}并发送Xnil,但这很难看并且打败了类型安全

4 个答案:

答案 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)

我最近需要表示一个可选/可能的类型,我不想使用指针而不能依赖零值。我最终选择写下面的内容,它会为你包装任何类型。它也可能适合您的用例。

https://github.com/leighmcculloch/go-optional