Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 有没有一种很好的方法来模拟;也许吧;或;选择权;输入围棋?_Types_Go_Nullable - Fatal编程技术网

Types 有没有一种很好的方法来模拟;也许吧;或;选择权;输入围棋?

Types 有没有一种很好的方法来模拟;也许吧;或;选择权;输入围棋?,types,go,nullable,Types,Go,Nullable,我正在通过chan X发送对请求的回复,其中X是一个结构。请求是一个搜索操作,因此理想情况下,我希望能够返回X,或者报告找不到它 这将是Haskell中的可能是X或OCaml中的X选项的任务。在围棋中有什么像样的方法吗?我没有返回指针(因为我返回的原始对象稍后可能会被修改),所以我不能只返回nil 编辑:现在我把它变成一个chan接口{},或者发送一个X或者nil,但是这很难看,并且破坏了类型安全。如果你使用接口{}你现在实际上是在返回一个指针。为什么不将接口{}更改为*X,并确保返回对象的副本

我正在通过
chan X
发送对请求的回复,其中
X
是一个结构。请求是一个搜索操作,因此理想情况下,我希望能够返回
X
,或者报告找不到它

这将是Haskell中的
可能是X
或OCaml中的
X选项的任务。在围棋中有什么像样的方法吗?我没有返回指针(因为我返回的原始对象稍后可能会被修改),所以我不能只返回
nil


编辑:现在我把它变成一个
chan接口{}
,或者发送一个
X
或者
nil
,但是这很难看,并且破坏了类型安全。

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

另一种方法是添加一个ok bool。您可以将其添加到X或包装X,如
struct{X;ok bool}
我使用指针类型,其中:

  • 可能是X
    =
    *X
  • Nothing
    =
    nil
  • 只有x
    =
    &x

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


嗯,是的,你知道。我想这是一种选择。将其称为
和*object
是最便宜/最简单的方法吗?(如果允许的话(我会检查。)我可以想到的两种不使用
reflect
包的方法是
a:=b;return&a
return&thistype{thisfield:b.thisfield,thisotherfield:b.thisotherfield}
。我还没有做过基准测试,但是前者使用的指令更少,它使用的代码更少,维护问题也更少,所以我会继续。干杯在中,我选择元组(接口{},标志)作为通道负载。有趣的是,我昨天推了它。