golang 泛型类型的零值

son*_*ico 13 generics go

我正在测试 golang 1.18beta2 版本。我有这个功能:


func Do[T any](value T) (T, bool) {
     if guardCondition {
         return nil, false // Complains about "cannot use nil as T value in return statement"
     }
     ... // rest of function
}
Run Code Online (Sandbox Code Playgroud)

由于不能在 return 语句中使用 nil 作为 T 值,因此无法编译。通常,您将返回一个指针或任何“nilable”类型。然而,当使用泛型时,似乎没有任何类型能让编译器满意。我找不到任何处理此示例的在线资源。

son*_*ico 18

您可以使用*new(T)它返回您期望的值来创建“零”值。

您可以在这里玩一下*new(T)- https://go.dev/play/p/7e7zGKMgoRW

更多信息 - /sf/answers/4941251171/

原来的答案,

好吧,刚刚尝试过

func Do[T any](value T) (T, bool) {
     if guardCondition {
         var noop T
         return noop, false
     }
     ... // rest of function
}
Run Code Online (Sandbox Code Playgroud)

这就是窍门:)

  • @RobertZaremba 使用 `*new(T)`。[更多详细信息](/sf/answers/4941251171/) (8认同)
  • 有点遗憾没有更好的办法。我希望 `make(T)` 能起作用。 (4认同)