English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Corso di base Golang

Istruzioni di controllo Golang

Funzione & Metodo Golang

Struttura Golang

Taglia & Array Golang

Stringa (String) Golang

Puntatore Golang

Interfaccia Golang

Concordanza Golang

Eccezioni Golang (Error)

Altri oggetti Golang

Parola chiave Defer Go

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