Golang Defer

Golang Defer
Funkcja odroczenia w GO pozwala opóźnić wykonanie funkcji, dopóki druga funkcja nie wyjdzie. W większości przypadków używamy słowa kluczowego odroczenia, aby opóźnić wykonanie funkcji w dalszej części programu do czyszczenia. Przykładem byłoby zamknięcie pliku, zamknięcie kanału lub zamykanie mutex. To nie jest inne, jeśli znasz w końcu lub zapewniasz w innych językach programowania.

Skorzystajmy z tego przewodnika, aby dowiedzieć się, jak korzystać z słowa kluczowego odroczenia w Go.

Golang Defer Słowo kluczowe.

Aby dodać mechanizm odroczenia do funkcji, użyj słowa kluczowego odroczenia, a następnie nazwy funkcji lub metody. Przykładowy kod jest taki jak pokazano:

Pakiet Main
importować „fmt”
func main ()
fmt.Println („I Run First”)
Defer FMT.Println („I Run last”)
fmt.Println („I Run Second”)

W powyższym przykładzie używamy słowa kluczowego odroczenia do słów, aby opóźnić wykonanie funkcji w czwartym wierszu. Oznacza to, że ta funkcja będzie wykonywana ostatnia.

Przykładem jest to, jak pokazano:

$ Go Run Defer.Iść
Biegnę najpierw
Biegnę na drugim miejscu
Biegam na ostatnim

Oznacza to, że metoda działa dopiero po powrocie wszystkich innych metod.

Należy pamiętać, że funkcja lub metoda wywołana słowem kluczowym odroczenia będzie działać tak długo, jak powróci inne metody/funkcje. Powrót może pochodzić przez panikę lub normalne wykonanie.

Rozważ poniższy przykład, w którym metoda jest wywoływana pomimo paniki.

Pakiet Main
importować „fmt”
func main ()
Defer FMT.Println („I Run”)
Panika („Panika!!!")
fmt.Println („I Don't Run”)

Powyższy kod powinien zwrócić:

$ Go Run Defer.Iść
biegnę
Panika: panika!!!
Goroutine 1 [bieganie]:
główny.główny()
+0x73
Status wyjścia 2

Kolejność wykonania

Argumenty odroczonej funkcji są oceniane natychmiast, chociaż wykonanie jest opóźnione, dopóki funkcja otaczająca nie powróci.

Jeśli masz więcej niż jedno wywołanie funkcji odroczonej, Go Organizuje je na liście i wykonuje je w kolejności ostatniego w pierwszej kolejności (LIFO).

Możemy to zilustrować za pomocą prostej pętli, jak pokazano poniżej:

Pakiet Main
importować „fmt”
func main ()
fmt.Println („I Start”)
dla i: = 1; I <= 5; i++
Defer FMT.Println (i)

fmt.Println („I Second”)

Możemy zobaczyć kolejność wykonania w wyjściu:

zaczynam
I Drugi
5
4
3
2
1

Użyj funkcji odroczenia, aby zwrócić wartość

Możesz użyć anonimowej funkcji odroczonej, aby uzyskać dostęp i zmienić parametry powrotu funkcji otaczającej.

Przykładem jest jak pokazano:

func say () (string str)
Defer func ()
str = "Goodbye"
()
powrót "Witaj!"

W tym przykładzie funkcja zwraca ciąg „Do widzenia” zamiast „Hello”.

Odroczenie praktycznego użycia - Zamknij plik

Prawdziwym przypadkiem użycia słowa kluczowego odroczenia jest zamknięcie pliku. Weźmy przykład pokazany poniżej:

Plik, err: = OS.Otwarte ("Witam.tekst")
Jeśli err != zero
dziennik.Fatalny (err)

plik odroczenia.Zamknąć()
Skaner: = bufio.NewsScanner (plik)
Skaner.Split (Bufio.Scanwords)
dla skanera.Skanowanie()
fmt.Println (skaner.Tekst())

Jeśli err: = skaner.Błądzić(); błądzić != zero
dziennik.Fatalny (err)

Otwieramy plik do odczytania za pomocą metody Open () w powyższym przykładzie. Następnie używamy słowa kluczowego Defer, aby opóźnić operację zamknięcia po zakończeniu operacji odczytu.

Wniosek

W tym artykule omawiamy, jak działa słowo kluczowe odroczenia i jak możemy go użyć do opóźnienia wykonywania funkcji.

Dziękuje za przeczytanie!!