2016-07-01 5 views
18

Я вызываю функцию, которая возвращает пустой массив, если нет значений.Как проверить пустой кусочек?

Когда я делаю это не работает:

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

Обходной я использую:

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

Но объявить переменную просто проверить возвращаемое значение не кажется правильным. Каков лучший способ сделать это?

+2

Go не является javascript! Прочтите основы: https://golang.org/doc/effective_go.html –

+4

Больше вещей - сначала - массив не является срезом. Массив - это тип, который имеет фиксированное количество элементов, поэтому вопрос имеет смысл только для среза. Второе - это не сработает, если вы инициализируете эти фрагменты. В-третьих - и как насчет того, если len (a) == 0? – lofcek

+0

Скомпилировано ли ваше решение? Я не вижу, как это будет, если 'r' также не является типом' [0] int', но в этом случае две (пустые) массивы всегда будут сравнивать равные. –

ответ

24

len() возвращает количество элементов в срезе или массиве.

Предполагая whatever() функция вы вызываете, вы можете сделать что-то вроде:

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

или если вам не нужны детали

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

Вы можете просто использовать функцию len.

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

Несмотря на то, так как вы с использованием массивов, массив типа [0]int (массив Int с размером 0) отличается от [n]int (п массив междунар с размером п) и не совместимы друг с другом.

Если у вас есть функция, которая возвращает массивы с разной длиной, рассмотрим использование срезов, потому что функция может быть объявлена ​​только с типом возвращаемого массива, имеющим определенную длину (например, func f() [n]int, n - константа), и этот массив будет иметь n значения в нем (они будут обнулены), даже если функция никогда ничего не пишет об этом массиве.

Смежные вопросы