„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 > Wie funktioniert das Defer-Schlüsselwort von Go in der Funktionsausführungsreihenfolge?

Wie funktioniert das Defer-Schlüsselwort von Go in der Funktionsausführungsreihenfolge?

Veröffentlicht am 06.11.2024
Durchsuche:658

How Does Go\'s Defer Keyword Work in Function Execution Order?

Verstehen der Funktionalität des Defer-Schlüsselworts von Go

Bei der Arbeit mit Go ist es entscheidend, das Verhalten des Defer-Schlüsselworts zu verstehen. Mit diesem Schlüsselwort können Entwickler die Ausführung einer Funktion verschieben, bis die umgebende Funktion zurückkehrt. Es ist jedoch wichtig zu beachten, dass der Wert und die Parameter der Funktion ausgewertet werden, wenn die Defer-Anweisung ausgeführt wird.

Beispiel: Defer Order auswerten

Bedenken Sie zur Veranschaulichung Folgendes Code:

package main

import "fmt"

func main() {
    defer having()(fun("with Go."))
    fmt.Print("some ") // evaluation order: 3
}

func having() func(string) {
    fmt.Print("Go ") // evaluation order: 1
    return funWithGo
}

func fun(msg string) string {
    fmt.Print("have ") // evaluation order: 2
    return msg
}

func funWithGo(msg string) {
    fmt.Println("fun", msg) // evaluation order: 4
}

In diesem Beispiel wird der Code in der folgenden Reihenfolge ausgeführt:

  1. mit Funktion wird ausgewertet und gibt eine Funktion zurück, die eine Zeichenfolge als Eingabe akzeptiert (Auswertungsreihenfolge: 1)
  2. fun-Funktion wird mit „with Go“ ausgewertet. Zeichenfolge als Eingabe (Auswertungsreihenfolge: 2)
  3. fmt.Print("some ") wird ausgeführt (Auswertungsreihenfolge: 3)
  4. defer ruft die funWithGo-Funktion mit dem Ergebnis von fun auf (Auswertungsreihenfolge: 4)

Anwenden des Defer-Prinzips

Um das in der ursprünglichen Abfrage erwähnte Problem zu beheben, können wir das Schlüsselwort „defer“ verwenden, um den Ticketpreis korrekt auszudrucken auf das eingegebene Alter. Unten finden Sie eine modifizierte Version des Codes:

package main

import "fmt"

func main() {
    age := 999
    defer fmt.Println("Your age is:", getAge(&age)) // defer printing the age
    defer fmt.Println("Your ticket price is:", getTicketPrice(age)) // defer printing the ticket price
}

func getTicketPrice(age int) float64 {
    // Calculate ticket price based on age
    // logic can be customized here
    fmt.Println("...order is 2...")
    switch {
    case age  13 && age 

In diesem geänderten Code nutzen wir das Schlüsselwort defer korrekt, um sicherzustellen, dass das Alter und der Ticketpreis gedruckt werden, nachdem die jeweiligen Funktionen ausgeführt wurden, wodurch das ursprüngliche Problem behoben wird.

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