如何检查空切片?

新手上路,请多包涵

如果没有值,我正在调用一个返回空数组的函数。

当我这样做时它不起作用:

 if r == [] {
    fmt.Println("No return value")
}

我正在使用的解决方法是:

 var a [0]int
if r == a {
    fmt.Println("No return value")
}

但是声明一个变量只是为了检查返回值似乎并不正确。这样做的更好方法是什么?

原文由 Kshitiz Sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 507
2 个回答

len() 返回切片或数组中的元素数。

假设 whatever() 是您调用的函数,您可以执行以下操作:

 r := whatever()
if len(r) > 0 {
  // do what you want
}

或者如果你不需要这些物品

if len(whatever()) > 0 {
  // do what you want
}

原文由 Simone Carletti 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以只使用 len 函数。

 if len(r) == 0 {
    fmt.Println("No return value")
}

尽管由于您使用的是数组,所以类型为 [0]int 的数组(大小为 0 的 int 数组)不同于 [n]int (n 为 int 的数组,大小为 n)并且不兼容彼此。

如果你有一个返回不同长度数组的函数,考虑使用切片,因为函数只能用具有特定长度的数组返回类型声明(例如 func f() [n]intn 是一个常量)并且该数组将包含 n 个值(它们将被清零),即使该函数从未向该数组写入任何内容。

原文由 abhink 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题