2016-07-01 21 views
18

Sto chiamando una funzione che restituisce un array vuoto se non ci sono valori.Come controllo una fetta vuota?

Quando faccio questo non funziona:

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

Il lavoro attorno sto usando è:

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

Ma dichiarare una variabile solo per controllare il valore di ritorno non lo fa sembra giusto Qual è il modo migliore per farlo?

+2

Go non è javascript! Leggi le basi: https://golang.org/doc/effective_go.html –

+4

Altre cose - prima - l'array non è una sezione. La matrice è il tipo, che ha un numero fisso di elementi, quindi la domanda ha senso solo per la sezione. Secondo: non funzionerà se inizializzi queste sezioni. Terzo - e se len (a) == 0? – lofcek

+0

La soluzione alternativa viene compilata? Non riesco a vedere come sarebbe a meno che 'r' sia anche di tipo' [0] int', ma in questo caso i due array (vuoti) sarebbero sempre uguali. –

risposta

24

len() restituisce il numero di elementi in una sezione o matrice.

Supponendo whatever() è la funzione si richiama, si può fare qualcosa di simile:

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

o se non avete bisogno degli elementi

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

Si può semplicemente utilizzare la funzione len.

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

Sebbene siccome usi array, un array di tipo [0]int (un array di int con dimensione 0) è diverso [n]int (n array di int con dimensione n) e non sono compatibili tra loro.

Se si dispone di una funzione che restituisce array con lunghezze diverse, è consigliabile utilizzare fette, perché la funzione può essere dichiarata solo con un tipo di ritorno matrice avente una lunghezza specifica (es func f() [n]int, n è una costante) e tale array avrà n valori in esso (saranno azzerati) anche se la funzione non scrive mai nulla su quell'array.