如何检查空切片?

时间:2016-07-01 11:16:43

标签: go slice

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

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

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

我使用的工作是:

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

但声明一个变量只是为了检查返回值似乎并不合适。有什么更好的方法呢?

3 个答案:

答案 0 :(得分:61)

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

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

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

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

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

答案 1 :(得分:12)

您可以使用len功能。

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

虽然您使用的是数组,但类型为[0]int的数组(大小为0的int数组)与[n]int(n大小为n的int数组)不同,并且与彼此。

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

答案 2 :(得分:1)

您可以使用Golang提供的内置功能

  

len()

这将帮助您轻松地找到一个切片是否为空。

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