Heim > Artikel > Backend-Entwicklung > Warum können Go-Funktionen nicht direkt mehrere Werte zurückgeben?
Beim Versuch, mehrere Werte in Go zurückzugeben, kann es verwirrend erscheinen, warum bestimmte Syntax gültig ist, andere jedoch nicht. Betrachten Sie zur Veranschaulichung die folgenden zwei Codeausschnitte:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
Der erste Codeausschnitt ist gültig und gibt sowohl den Info- als auch den Bool-Wert zurück. Allerdings ist das zweite Snippet ungültig:
func FindUserInfo(id string) (Info, bool) { return all[id] }
Da stellt sich die Frage, warum das erste Snippet gültig ist und das zweite nicht. Darüber hinaus fragt man sich vielleicht, ob es eine Möglichkeit gibt, die Verwendung temporärer Variablen wie it und present zu vermeiden.
Der Schlüssel zum Verständnis dieses Verhaltens liegt im „Comma ok"-Muster. Wenn in Go auf eine Karte zugegriffen wird, ist das Ergebnis ein Wertepaar: der mit dem Schlüssel verknüpfte Wert und ein boolescher Wert, der angibt, ob der Schlüssel in der Karte vorhanden ist. Dies wird häufig verwendet, um zwischen einem fehlenden Schlüssel und einem Nullwert zu unterscheiden.
Im ersten Codeausschnitt gibt der all[id]-Ausdruck ein Wertepaar zurück, das ihm zugewiesen und vorhanden ist. Die Return-Anweisung gibt dann diese Werte zurück.
Der Compiler spielt eine Rolle bei der Bestimmung, ob eine mehrwertige Zuweisung gültig ist. Wenn die Funktion mehrere Werte zurückgibt, der Empfänger auf der linken Seite jedoch nur eine Variable hat, gibt der Compiler einen Fehler aus. Dies liegt daran, dass der Compiler erwartet, dass die Anzahl der zurückgegebenen Werte mit der Anzahl der sie empfangenden Variablen übereinstimmt.
Im Fall des zweiten Codeausschnitts gibt der Ausdruck „return all[id]“ nur einen Wert zurück, was inkompatibel ist mit den beiden Variablen auf der linken Seite. Daher meldet der Compiler einen Fehler.
Leider lässt sich die Verwendung temporärer Variablen bei der Rückgabe mehrerer Werte in einer Go-Funktion nicht vermeiden. Dies liegt daran, dass der Compiler benötigt, dass die Anzahl der zurückgegebenen Werte mit der Anzahl der Variablen übereinstimmt, die sie empfangen. Es ist jedoch möglich, die Verwendung temporärer Variablen zu minimieren, indem benannte Rückgabewerte verwendet oder eine Struktur zurückgegeben werden.
Das obige ist der detaillierte Inhalt vonWarum können Go-Funktionen nicht direkt mehrere Werte zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!