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