English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In Go, l'istruzione defer ritardafunzioneo metodo oMetodo anonimol'esecuzione fino a che la funzione vicina non torna. In altre parole, la chiamata a funzione o metodo deferita viene valutata immediatamente, ma viene eseguita fino a che la funzione vicina non torna. Puoi creare metodi, funzioni o funzioni anonime utilizzando la parola chiave defer.
Sintassi:
//Funzione defer func func_name(parameter_list Type) return_type{ // Codice } // Metodo defer func (receiver Type) method_name(parameter_list){ // Codice } defer func (parameter_list)(return_type){ // code }()
Precauzioni:
In Go, è permesso avere più istruzioni defer nello stesso programma, e vengono eseguite in ordine LIFO (last in, first out), come mostrato nell'esempio 2.
Nelle istruzioni defer, i parametri vengono valutati al momento dell'esecuzione dell'istruzione defer (non al momento della chiamata).
Le istruzioni defer sono solitamente usate per assicurarsi che i file vengano chiusi dopo la fine del file, i canali o per gestire emergenze nel programma.
Parliamo di questo concetto con l'aiuto di un esempio:
Esempio 1:
package main import "fmt" //Funzione func mul(a1, a2 int) int { res := a1 * a2 fmt.Println("Risultato: ", res) return 0 } func show() { fmt.Println("Hello!, it.oldtoolbag.com Corso di base del linguaggio Go") } func main() { //Chiamata della funzione mul() //Ecco il comportamento della funzione mul //Come una funzione normale mul(23, 45) //Chiamata della funzione mul() //Usando la parola chiave defer //Ecco la funzione mul() //È una funzione differita defer mul(23, 56) //Chiamata della funzione show() show() }
Output:
Risultato: 1035 Hello!, it.oldtoolbag.com Corso di base del linguaggio Go Risultato: 1288
Spiegazione dell'uso:Nell'esempio sopra, abbiamo due funzioni chiamatemul()eshow()funzione della funzione. Di cuishow()La funzione di solito vienemain()funzione, contemporaneamente chiamiamomul()funzione:
Prima di tutto, chiamiamo la funzione come una funzione regolaremulfunzione, ossia mul(23,45) e viene eseguita durante la chiamata della funzione (Output: Risultato: 1035).
In secondo luogo, usiamo la parola chiave defer permul()La funzione chiamata defer function, ossia defer mul( 23,56),quando tutti i metodi circostanti ritornano, esegue (Output: Risultato: 1288).
Esempio 2:
package main import "fmt" //Funzione func add(a1, a2 int) int { res := a1 + a2 fmt.Println("Risultato: ", res) return 0 } func main() { fmt.Println("Inizio") //Più istruzioni defered //Eseguito in ordine LIFO defer fmt.Println("Fine") defer add(34, 56) defer add(10, 10) }
Output:
Inizio Risultato: 20 Risultato: 90 Fine