Wie überprüfe ich, ob eine Scheibe leer ist?

72

Ich rufe eine Funktion auf, die ein leeres Array zurückgibt, wenn keine Werte vorhanden sind.

Wenn ich das mache, funktioniert es nicht:

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

Die Arbeit, die ich benutze, ist:

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

Das Deklarieren einer Variablen nur zur Überprüfung des Rückgabewerts scheint jedoch nicht richtig zu sein. Was ist der bessere Weg, dies zu tun?

Kshitiz Sharma
quelle
4
Go ist kein Javascript! Lesen Sie die Grundlagen: golang.org/doc/effective_go.html
Endre Simo
6
Mehr Dinge - zuerst - Array ist kein Slice. Array ist ein Typ mit einer festen Anzahl von Elementen, daher ist die Frage nur für Slice sinnvoll. Zweitens - es wird nicht funktionieren, wenn Sie diese Slices initialisieren. Drittens - und was ist, wenn len (a) == 0 ist?
Lofcek
Wird Ihre Problemumgehung kompiliert? Ich kann nicht sehen, wie es wäre, wenn es nicht rauch vom Typ wäre, [0]intaber in diesem Fall würden die beiden (leeren) Arrays immer gleich vergleichen.
Paul Hankin
@ PaulHankin Ja, es funktioniert. Der Rückgabetyp der Funktion ist int []
Kshitiz Sharma

Antworten:

99

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

Angenommen, whatever()die Funktion, die Sie aufrufen, können Sie Folgendes tun:

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

oder wenn Sie die Artikel nicht benötigen

if len(whatever()) > 0 {
  // do what you want
}
Simone Carletti
quelle
3
Das Problem bei diesem Ansatz ist, dass ein Slice, das gerade deklariert wurde var num []int, auch die Länge auf Null zurückgibt. dhlen(num) == 0
nawazish-stackoverflow
13

Sie können einfach die lenFunktion verwenden.

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

Da Sie jedoch Arrays verwenden, unterscheidet sich ein Array vom Typ [0]int(ein Array von int mit der Größe 0) von [n]int(n Array von int mit der Größe n) und ist nicht miteinander kompatibel.

Wenn Sie eine Funktion haben , die zurückkehrt Arrays mit unterschiedlichen Längen, betrachten Scheiben verwenden, weil Funktion nur mit einer Reihe Rückgabetyp mit einer spezifischen Länge erklärt werden kann ( zum Beispiel func f() [n]int, nist eine Konstante) , und dass Anordnung hat n - Werte in ihr (sie‘ Ich werde auf Null gesetzt), auch wenn die Funktion niemals etwas in dieses Array schreibt.

abdenken
quelle
4

Sie können die eingebaute Funktion von Golang verwenden

len ()

Es hilft Ihnen leicht zu finden, ob eine Scheibe leer ist oder nicht.

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