Golang Defer

Golang Defer
Mit der Defer -Funktion in GO können Sie die Ausführung einer Funktion verzögern, bis die andere Funktion beendet ist. In den meisten Fällen verwenden wir das Keyword von Defer, um die Ausführung einer Funktion später im Programm zur Reinigung zu verzögern. Ein Beispiel wäre, eine Datei zu schließen, einen Kanal zu schließen oder einen Mutex zu schließen. Dies ist nicht anders, wenn Sie mit dem endlich vertraut sind oder in anderen Programmiersprachen sicherstellen.

Lassen Sie uns diesen Leitfaden verwenden, um zu erfahren.

Golang Defer Keyword.

Verwenden Sie das Defer -Keyword, gefolgt vom Namen der Funktion oder des Methodennamens, um den Mechanismus des Aufschubmechanismus hinzuzufügen. Ein Beispielcode ist wie gezeigt:

Paket Main
importieren "fmt"
func main ()
fmt.Println ("Ich renne zuerst")
Verschiebung fmt.Println ("Ich renne letztes")
fmt.Println ("Ich renne zweite")

Im obigen Beispiel verwenden wir das Schlüsselwort "Defer" zu Wörtern, um die Ausführung der Funktion in der vierten Zeile zu verzögern. Dies bedeutet, dass diese Funktion zuletzt ausgeführt wird.

Ein Beispielausgang ist wie gezeigt:

$ go run defer.gehen
Ich renne zuerst
Ich renne Zweiter
Ich renne zuletzt

Dies bedeutet, dass die Methode erst nach Rückkehr aller anderen Methoden ausgeführt wird.

Beachten Sie, dass die mit einem Defer -Schlüsselwort aufgerufene Funktion oder Methode so lange ausgeführt wird, wie die anderen Methoden/Funktionen zurückkehren. Die Rückkehr kann entweder durch eine Panik oder eine normale Ausführung erfolgen.

Betrachten Sie das Beispiel unten, wo eine Methode trotz einer Panik aufgerufen wird.

Paket Main
importieren "fmt"
func main ()
Verschiebung fmt.Println ("Ich renne")
Panik ("Panik!!!"))
fmt.Println ("Ich renne nicht")

Der obige Code sollte zurückgeben:

$ go run defer.gehen
ich renne
Panik: Panik!!!
Goroutine 1 [Running]:
hauptsächlich.hauptsächlich()
+0x73
Beendenstatus 2

Ausführungsreihenfolge

Die Argumente einer aufgeschobenen Funktion werden sofort bewertet, obwohl die Ausführung bis zur Rückkehr der umgebenden Funktion verzögert wird.

Wenn Sie mehr als einen aufgeschobenen Funktionsaufruf haben, organisiert Go sie in einer Liste und führt sie in der ersten Reihenfolge (LIFO) aus, die in der ersten Reihenfolge (LIFO) ausführt.

Wir können dies anhand einer einfachen für die Schleife veranschaulichen, wie unten gezeigt:

Paket Main
importieren "fmt"
func main ()
fmt.Println ("Ich starte")
für i: = 1; ich <= 5; i++
Verschiebung fmt.Println (i)

fmt.Println ("i zweite")

Wir können die Ausführungsreihenfolge in der Ausgabe sehen:

ich beginne
Ich stimme zu
5
4
3
2
1

Verwenden Sie die Defer -Funktion, um einen Wert zurückzugeben

Sie können eine anonyme aufgeschobene Funktion verwenden, um auf die Rückgaberameter der umgebenden Funktion zuzugreifen und sie zu ändern.

Ein Beispiel ist wie gezeigt:

Func Say () (STR String)
Defer func ()
Str = "Auf Wiedersehen"
())
Rückkehr "Hallo!"

In diesem Beispiel gibt die Funktion die Zeichenfolge "Auf Wiedersehen" anstelle von "Hallo" zurück.

Praktische Verwendung verschieben - Datei schließen

Eine reale Anwendungsfall des Defer-Schlüsselworts besteht darin, eine Datei zu schließen. Nehmen Sie das unten gezeigte Beispiel:

Datei, ERR: = OS.Offen ("Hallo.txt")
Wenn er irrt != nil
Protokoll.Tödlich (arr)

Datei verschieben.Schließen()
Scanner: = bufio.Newscanner (Datei)
Scanner.Geteilt (bufio.Scanwords)
für Scanner.Scan ()
fmt.Println (Scanner.Text())

Wenn ERR: = Scanner.Irren(); irren != nil
Protokoll.Tödlich (arr)

Wir öffnen die Datei zum Lesen mit der Methode open () im obigen Beispiel. Wir verwenden dann das Schlüsselwort für Defer.

Abschluss

In diesem Artikel diskutieren wir, wie das Keyword für das Keyword aufgeschoben wird und wie wir es verwenden können, um die Ausführung einer Funktion zu verzögern.

Danke fürs Lesen!!