如何检查空切片?

How do I check for an empty slice?

我正在调用一个函数,如果没有值,return是一个空数组。

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

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

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

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

但是声明一个变量只是为了检查 return 值似乎不对。执行此操作的更好方法是什么?

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

假设 whatever() 是你调用的函数,你可以这样做:

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

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

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

您可以只使用 len 功能。

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

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

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

您可以使用Golang提供的内置函数

len()

它可以帮助您轻松找到切片是否为空。

if len( yourFunction() ) == 0 {
    // It implies that your array is empty.
}