MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

defer și panic

defer

Operatorul defer permite executarea unei funcții anume la sfârșitul programului, indiferent de locul în care este apelată acea funcție. De exemplu:

package main
import "fmt"
 
func main() {
    defer finish()
    fmt.Println("Program has been started")
    fmt.Println("Program is working")
}
 
func finish(){
    fmt.Println("Program has been finished")
}

Aici, funcția finish este apelată cu operatorul defer, așa că această funcție va fi apelată în realitate la sfârșitul execuției programului, chiar dacă apelul este definit la începutul funcției main. În particular, vom obține următorul output pe consolă:

Program has been started
Program is working
Program has been finished

Dacă sunt apelate mai multe funcții cu operatorul defer, acele funcții care sunt apelate mai devreme vor fi executate ultimele. De exemplu:

package main
import "fmt"
 
func main() {
    defer finish()
    defer fmt.Println("Program has been started")
    fmt.Println("Program is working")
}
 
func finish(){
    fmt.Println("Program has been finished")
}

Output-ul pe consolă va fi:

Program is working
Program has been started
Program has been finished

panic

Operatorul panic permite generarea unei erori și ieșirea din program:

package main
import "fmt"
 
func main() {
    fmt.Println(divide(15, 5))
    fmt.Println(divide(4, 0))
    fmt.Println("Program has been finished")
}

func divide(x, y float64) float64{
    if y == 0{ 
        panic("Division by zero!")
    }
    return x / y
}

Putem transmite orice mesaj operatorului panic, care va fi afișat pe consolă. De exemplu, în acest caz, în funcția divide, dacă al doilea parametru este 0, va fi apelat panic("Division by zero!").

În funcția main, apelul fmt.Println(divide(4, 0)) va executa operatorul panic, deoarece al doilea parametru al funcției divide este 0. În acest caz, toate operațiile care urmează după acest apel, cum ar fi fmt.Println("Program has been finished"), nu vor fi executate. În acest caz, vom obține următorul output pe consolă:

3
panic: Division by zero!

Și la sfârșitul output-ului va apărea informația de diagnosticare despre locul unde a apărut eroarea.