Warum können Go-Funktionen nicht direkt mehrere Werte zurückgeben?

DDD
Freigeben: 2024-11-07 17:13:03
Original
337 Leute haben es durchsucht

Why Can't Go Functions Return Multiple Values Directly?

Go-Problem mit der Rückgabe mehrerer Werte

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
}
Nach dem Login kopieren

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]
}
Nach dem Login kopieren

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.

Erklärung des „Comma Ok“-Musters

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.

Überlegungen zum Compiler

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.

Temporäre Variablen vermeiden

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage