Ce face log.Panic
log.Panic și log.Panicf scriu mesajul ca Print/Printf și apoi apelează panic cu textul mesajului. Spre deosebire de log.Fatal, funcțiile amânate cu defer rulează, iar panica poate fi prinsă cu recover.
Dacă nimeni nu prinde panica, programul se oprește cu mesajul și lista apelurilor (stack trace), cu codul de ieșire 2.
Parametri
| Parametru | Descriere |
|---|---|
v |
Valorile mesajului. |
format |
La Panicf: șablonul mesajului. |
Ce returnează
Nu se întoarce normal; declanșează panic.
Exemple
Exemplul 1: Panică prinsă cu recover
package main
import (
"fmt"
"log"
"os"
)
func proceseaza(cantitate int) {
defer fmt.Println("defer: rulează și la panică")
if cantitate < 0 {
log.Panicf("cantitate negativă: %d", cantitate)
}
fmt.Println("procesat:", cantitate)
}
func main() {
log.SetOutput(os.Stdout)
log.SetFlags(0)
defer func() {
if r := recover(); r != nil {
fmt.Printf("am prins panica: %v (tip %T)\n", r, r)
}
}()
proceseaza(5)
proceseaza(-2)
fmt.Println("nu ajungem aici")
}
Rezultat
procesat: 5
defer: rulează și la panică
cantitate negativă: -2
defer: rulează și la panică
am prins panica: cantitate negativă: -2 (tip string)
Exemplul 2: Panică neprinsă
package main
import "log"
func main() {
log.Panic("stare imposibilă: stoc negativ")
}
Rezultat în terminal (adresele diferă)
2025/03/14 10:30:00 stare imposibilă: stoc negativ
panic: stare imposibilă: stoc negativ
goroutine 1 [running]:
log.Panic({0x5e8454a48e88?, 0x0?, 0x5e8454a48e98?})
/usr/local/go/src/log/log.go:451 +0x70
main.main()
/home/ana/exemplu/main.go:6 +0x3c
exit status 2
Greșeli frecvente
- Folosești
log.Panicpentru erori obișnuite (fișier lipsă, date greșite). Panica este pentru situații care „nu ar trebui să se întâmple”; erorile normale se returnează.
Comenzi înrudite
log.Fatal: Scrie mesajul în jurnal și oprește imediat programul cu codul 1 (ca log.Print urmat de os.Exit(1)).log.Printf: Scrie în jurnal un mesaj formatat după un șablon (ca fmt.Printf), precedat de dată și oră.os.Exit: Oprește imediat programul cu codul de ieșire dat; funcțiile amânate cu defer nu mai rulează.