Heim > Backend-Entwicklung > Golang > Wie unterscheiden sich benannte und normale Renditen in Go beim Umgang mit Paniken?

Wie unterscheiden sich benannte und normale Renditen in Go beim Umgang mit Paniken?

Linda Hamilton
Freigeben: 2024-11-20 11:50:10
Original
359 Leute haben es durchsucht

How Do Named and Normal Returns in Go Differ in Handling Panics?

Benannte Rückgaben entlarven die durch normale Rückgaben verdeckte Panik

In Go liegt der Unterschied zwischen normalen und benannten Rückgaben außerhalb der Lesbarkeit. Benannte Rückgaben ermöglichen Änderungen an Rückgabewerten, die sich auf die Ergebnisse im Panikfall auswirken.

Problem

Bedenken Sie den folgenden Code:

import (
    "fmt"
    "log"
)

func catch(err *error) {
    if r := recover(); r != nil {
        *err = fmt.Errorf("recovered panic: %v", r)
    }
}

func panicIf42(n int) {
    if n == 42 {
        panic("42!")
    }
}

func NormalReturns(n int) error {
    var err error
    defer catch(&err)
    panicIf42(n)
    return err
}

func NamedReturns(n int) (err error) {
    defer catch(&err)
    panicIf42(n)
    return
}

func main() {
    err := NamedReturns(42)
    log.Printf("NamedReturns error: %v", err)
    err = NormalReturns(42)
    log.Printf("NormalReturns error: %v", err)
}
Nach dem Login kopieren

Unerwartet gibt NormalReturns Null zurück. während NamedReturns einen Fehler zurückgibt. Wie kann dieses Verhalten erklärt werden?

Erklärung

In NormalReturns wird der Rückgabewert auf Null initialisiert (der Nullwert des Fehlers). Da die Panik in panicIf42() verhindert, dass die Return-Anweisung erreicht wird, bleibt die Ergebnisvariable auf Null gesetzt.

Im Gegensatz dazu deklariert NamedReturns eine benannte Rückgabevariable err. Bei einer Panik ändert die verzögerte Funktion „catch()“ diese Variable. Der benannte Ergebniswert wird beibehalten und zurückgegeben, auch wenn die Return-Anweisung nicht ausgeführt wird.

Benannte Rückgabefunktionen

  • Benannte Rückgaben ermöglichen den Zugriff und die Änderung von Ergebniswerten innerhalb verzögerter Funktionen.
  • Wenn die Return-Anweisung aufgrund einer Panik nicht erreicht wird, können benannte Rückgabewerte trotzdem aktualisiert und zurückgegeben werden.
  • Dieses Verhalten ermöglicht die Rückgabe von Werten ungleich Null auch bei Vorliegen einer Panik .

Fazit

Benannte Rückgaben bieten mehr Flexibilität und Kontrolle über Rückgabewerte. Sie ermöglichen die Änderung von Rückgabewerten durch verzögerte Funktionen und stellen sicher, dass bestimmte Werte auch im Panikfall zurückgegeben werden. Durch das Verständnis dieser Nuancen können Entwickler benannte Rückgaben effektiv nutzen, um Ausnahmefälle zu behandeln und Fehlerbedingungen genau zu übermitteln.

Das obige ist der detaillierte Inhalt vonWie unterscheiden sich benannte und normale Renditen in Go beim Umgang mit Paniken?. 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