Heim > Backend-Entwicklung > Golang > Wie interagieren „Defer'-Anweisungen und benannte Rückgabewerte in Go?

Wie interagieren „Defer'-Anweisungen und benannte Rückgabewerte in Go?

Mary-Kate Olsen
Freigeben: 2024-12-01 18:23:09
Original
867 Leute haben es durchsucht

How Do `defer` Statements and Named Return Values Interact in Go?

Defer- und benannte Rückgabewerte in Go verstehen

In Go ermöglicht die Defer-Anweisung Funktionen, Code auszuführen, nachdem die umgebende Funktion zurückgegeben wurde. Dieses Verhalten kann verwendet werden, um die benannten Rückgabewerte der umgebenden Funktion zu ändern.

Betrachten Sie das folgende Beispiel:

func c() (i int) {
    defer func() { i++ }()
    return 1
}
Nach dem Login kopieren

Diese Funktion gibt 2 zurück, obwohl die Anweisung „return 1“ verwendet wird. Dies liegt daran, dass die Defer-Anweisung einen Funktionsaufruf auf einen Stapel verschiebt, der unmittelbar vor der Rückkehr der umgebenden Funktion ausgeführt wird. Daher wird die i-Anweisung nach der return 1-Anweisung ausgeführt, wodurch der Wert von i auf 2 erhöht wird.

Naked Returns verstehen

Es ist wichtig klarzustellen, dass ein „naked „return“ in Go bezieht sich auf eine Return-Anweisung ohne Argumente. In solchen Fällen werden die benannten Rückgabewerte zurückgegeben, ohne dass sie explizit zugewiesen wurden.

func a() (i int) {
    i = 2
    return
}
Nach dem Login kopieren

Diese Funktion gibt 2 zurück, da die nackte Return-Anweisung den benannten Rückgabewert i zurückgibt, der zuvor 2 zugewiesen wurde.

Kombination von Defer und Non-Naked Returns

Im Beispiel der Funktion c ändert die Defer-Anweisung die benannter Rückgabewert i, nachdem die Anweisung „return 1“ ausgeführt wurde. Dies entspricht praktisch dem folgenden Code:

func c() (i int) {
    i = 1
    defer func() { i++ }()
}
Nach dem Login kopieren

In diesem Fall gibt die Return-Anweisung immer noch 1 zurück, aber die Defer-Anweisung erhöht den Wert von i, bevor die Funktion zurückkehrt.

Das obige ist der detaillierte Inhalt vonWie interagieren „Defer'-Anweisungen und benannte Rückgabewerte in Go?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage