Golang Defer

Golang Defer
La funzione Defer in GO consente di ritardare l'esecuzione di una funzione fino a quando l'altra funzione esce. Nella maggior parte dei casi, utilizziamo la parola chiave Defer per ritardare l'esecuzione di una funzione più avanti nel programma per la pulizia. Un esempio sarebbe quello di chiudere un file, chiudere un canale o chiudere un mutex. Questo non è diverso se hai familiarità con finalmente o assicurati in altri linguaggi di programmazione.

Usiamo questa guida per imparare come utilizzare la parola chiave Defer in GO.

Golang Defer Key Word.

Per aggiungere il meccanismo Defer a una funzione, utilizzare la parola chiave Defer seguita dalla funzione o dal nome del metodo. Un codice di esempio è come mostrato:

Pacchetto principale
Importa "FMT"
func main ()
fmt.Println ("corro primo")
Defer fmt.Println ("corro ultimo")
fmt.Println ("corro secondo")

Nell'esempio sopra, utilizziamo la parola chiave Defer a parole per ritardare l'esecuzione della funzione sulla quarta riga. Ciò significa che questa funzione eseguirà ultima.

Un output di esempio è come mostrato:

$ go run Defer.andare
Corro per primo
Corro secondo
Corro per ultimo

Ciò significa che il metodo funziona solo dopo che tutti gli altri metodi sono tornati.

Tieni presente che la funzione o il metodo chiamato con una parola chiave Defer verrà eseguita fintanto che gli altri metodi/funzioni tornano. Il ritorno può essere attraverso un panico o una normale esecuzione.

Considera l'esempio seguente in cui un metodo viene chiamato nonostante un panico.

Pacchetto principale
Importa "FMT"
func main ()
Defer fmt.Println ("I run")
panico ("panico!!!")
fmt.Println ("non corro")

Il codice sopra dovrebbe restituire:

$ go run Defer.andare
io corro
Panico: panico!!!
Goroutine 1 [Running]:
principale.principale()
+0x73
Stato di uscita 2

Ordine di esecuzione

Gli argomenti di una funzione differita vengono valutati immediatamente, sebbene l'esecuzione venga ritardata fino al ritorno della funzione circostante.

Se hai più di una chiamata di funzione differita, GO organizzali in un elenco e li esegui in ordine ultimo in primo luogo (LIFO).

Possiamo illustrare questo usando un loop semplice come mostrato di seguito:

Pacchetto principale
Importa "FMT"
func main ()
fmt.Println ("Inizio")
per i: = 1; io <= 5; i++
Defer fmt.Println (i)

fmt.Println ("i secondo")

Possiamo vedere l'ordine di esecuzione nell'output:

io inizio
I secondo
5
4
3
2
1

Usa la funzione Defer per restituire un valore

È possibile utilizzare una funzione anonima differita per accedere e modificare i parametri di ritorno della funzione circostante.

Un esempio è come mostrato:

func say () (str String)
Defer func ()
str = "addio"
()
restituire "ciao!"

In questo esempio, la funzione restituisce la stringa "addio" invece di "ciao".

Defer pratico Uso - Chiudi file

Un caso d'uso del mondo reale della parola chiave Defer è chiudere un file. Prendi l'esempio mostrato di seguito:

File, err: = OS.Aperto ("Ciao.TXT")
Se err != nil
tronco d'albero.Fatale (err)

DEFER FILE.Vicino()
scanner: = bufio.NewsCanner (file)
scanner.Diviso (bufio.Scanwords)
per scanner.Scansione()
fmt.Println (scanner.Testo())

se err: = scanner.Err (); err != nil
tronco d'albero.Fatale (err)

Apriamo il file per leggere usando il metodo Open () nell'esempio sopra. Quindi utilizziamo la parola chiave Defer per ritardare l'operazione di chiusura dopo il completamento dell'operazione di lettura.

Conclusione

In questo articolo, discutiamo di come funziona la parola chiave per differire e come possiamo usarla per ritardare l'esecuzione di una funzione.

Grazie per aver letto!!