2016-07-01 12 views
18

Ich rufe eine Funktion auf, die ein leeres Array zurückgibt, wenn keine Werte vorhanden sind.Wie überprüfe ich nach einer leeren Scheibe?

Wenn ich das tue es nicht funktioniert:

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

Die Arbeit rund um Ich verwende ist:

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

Aber die Deklaration einer Variablen nur der Rückgabewert zu überprüfen, nicht der Fall ist scheint richtig zu sein. Was ist der bessere Weg, dies zu tun?

+2

Go ist kein Javascript! Lesen Sie die Grundlagen: https://golang.org/doc/effective_go.html –

+4

Mehr Dinge - zuerst - Array ist kein Stück. Array ist ein Typ, der eine feste Anzahl von Elementen hat, daher ist die Frage nur für Slice sinnvoll. Zweitens - es wird nicht funktionieren, wenn Sie diese Scheiben initialisieren. Drittens - und was ist, wenn len (a) == 0? – lofcek

+0

Kompiliert Ihre Problemumgehung? Ich kann nicht sehen, wie es wäre, wenn "r" auch vom Typ "[0] int" ist, aber in diesem Fall würden die zwei (leeren) Arrays immer gleich sein. –

Antwort

24

len() gibt die Anzahl der Elemente in einem Slice oder Array zurück.

whatever() Unter der Annahme, ist die Funktion, die Sie aufrufen, können Sie so etwas wie:

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

oder wenn Sie die Einzelteile nicht brauchen

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

Sie können nur die len-Funktion verwenden.

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

Obwohl seit Sie Arrays verwenden, eine Anordnung des Typs [0]int (ein Array von int mit Größe 0) ist anders als [n]int (n Array von int mit der Größe n) und sind nicht miteinander kompatibel.

Wenn Sie eine Funktion haben, die Arrays mit unterschiedlicher Länge zurückkehrt, prüfen Scheiben verwenden, weil Funktion kann nur mit einer Reihe Rückgabetyp mit einer spezifischen Länge deklariert werden (zB func f() [n]int ist n eine Konstante ist), und dass Array n Werte darin (sie werden auf Null gesetzt), selbst wenn die Funktion niemals etwas in dieses Array schreibt.