„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum können Go-Funktionen nicht direkt mehrere Werte zurückgeben?

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

Veröffentlicht am 20.11.2024
Durchsuche:590

Why Can't Go Functions Return Multiple Values Directly?

Problem mit der Rückgabe mehrerer Werte durch Go

Beim Versuch, in Go mehrere Werte 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
}

Das erste Code-Snippet ist gültig und gibt sowohl den Info- als auch den Bool-Wert zurück. Das zweite Snippet ist jedoch 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.

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.

Vermeiden temporärer Variablen

Leider gibt es keine Möglichkeit, die Verwendung temporärer Variablen zu vermeiden, wenn in einer Go-Funktion mehrere Werte zurückgegeben werden. 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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3