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

Ash*_*she 13 types nullable go

我正在通过a发送对请求的回复chan X,其中X是struct.请求是一个搜索操作,所以理想情况下我希望能够返回一个X,或报告它没有找到.

这将是Maybe XHaskell或x optionOCaml中的任务.在Go中有什么好的方法吗?我没有返回指针(因为我正在返回的原始对象可能会在以后修改),所以我不能只返回nil.

编辑:现在我正在制作一个chan interface{}或者发送一个Xnil,但这是丑陋的,并打败类型安全.

jam*_*her 9

我使用指针类型,其中:

  • Maybe X = *X
  • Nothing = nil
  • Just x = &x


mkb*_*mkb 5

如果您正在使用,那么interface {}您现在实际上正在返回一个指针。为什么不更改interface {}*X并确保返回对象的副本?如果我理解你不使用 a 的原因chan *X,那就是。


Son*_*nia 5

另一种方法是添加一个 ok bool。您可以将其添加到 X 或包装 X,例如struct {X; ok bool}