Go-Problem bei der Rückgabe mehrerer Werte
In Go ist die Rückgabe mehrerer Werte von einer Funktion eine gängige Praxis, es können jedoch bestimmte Syntaxeinschränkungen auftreten . Lassen Sie uns untersuchen, warum sich die folgenden Codeausschnitte unterschiedlich verhalten:
Gültiger Code:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
Ungültiger Code:
func FindUserInfo(id string) (Info, bool) { return all[id] }
Grund für ungültige Syntax:
Das zweite Code-Snippet versucht, zwei Werte direkt aus der Kartensuche all[id] zurückzugeben. Go erfordert jedoch die explizite Zuweisung mehrerer Rückgabewerte.
Muster „Comma Ok“:
Das Muster „Comma Ok“ von Go ist ein Mechanismus zum Extrahieren eines Werts und ein boolescher Indikator (normalerweise mit dem Namen ok) für den Zugriff auf einen Kartenschlüssel. Dieses Muster wird für Karten, Kanäle und Typzusicherungen unterstützt.
In Ihrem Fall handelt es sich um den abgerufenen Wert, und „present“ ist ein boolescher Wert, der angibt, ob der Schlüssel in der Karte vorhanden ist. Die Zuweisung mit Komma-Trennung it, present := all[id] verwendet implizit dieses Muster.
Entpacken-Methode verstehen:
Intern verwendet Go zur Handhabung die Entpacken-Methode mehrere Wertzuweisungen. Diese Methode bestimmt, ob es sich bei der Zuweisung um einen „Komma-OK“-Fall handelt, basierend auf dem Modus der Operanden (z. B. Kartenindizierung, Kanalwert, Typzusicherung).
Standardmäßig lässt die Entpackmethode nur Komma-OK-Zuweisungen zu bei Zuweisungen mit zwei Variablen auf der linken Seite. Diese Einschränkung wird in der Checker.initVars()-Methode festgelegt.
Fazit:
Das „Comma Ok“-Muster in Go ermöglicht das Abrufen mehrerer Werte aus Karten, Kanälen, und geben Sie Behauptungen ein. Allerdings ist eine explizite Zuweisung von Rückgabewerten erforderlich, und der Compiler beschränkt Komma-OK-Zuweisungen auf Szenarien, in denen auf der linken Seite zwei Variablen vorhanden sind.
Das obige ist der detaillierte Inhalt vonWarum erfordert Go eine explizite Abtretung für mehrwertige Retouren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!