Gitme zamanı, panic(nil)
algılayabilir ve bir hata bildirir.Panik (nil) ve ertelenmiş işlevdeki normal yürütme nasıl algılanır?
Ancak nil
verdiği için, bir defer
kırmızı işlevinde recover()
ile panic(nil)
tespit edemez, böylece recover()
dönüş değer sıfır I için test etmek gibi normal çalıştırma (panik) ayırt edilemez . Örneğin
,
defer func(){
var err = recover()
if err != nil {
// Real serious situation. Panic from inner code.
// And we may have some critical resources which
// must be cleaned-up at any cases.
// However, this will not be executed for panic(nil)
rollback()
// I am still not sure that how should I treat `panic`…
// Should I just ignore them?
}
}()
var err = doTransaction()
if err == nil {
commit() // Happy case.
} else {
rollback() // Regular execution. Just a lucky case.
}
ROLLBACK sadece bir örnektir ve ben kritik durumlarda bol temizleme ihtiyacı olabilir düşünüyorum. Peki, bu temizleme kodu gerçek program çökmesine de uygulanmayacak, ancak olabildiğince savunmak istiyorum.
Parametresinden bağımsız olarak ertelenmiş bir işlevdeki herhangi bir paniği nasıl algılayabilirim?
Belirsiz bir soru için üzgünüm. İstediğim şey, 'panik (nil)' ve 'normal işlev' işlevini ertelemekti… – Eonil
Belki de fonksiyondan çıkmadan önce bir bayrak ayarlayabilirim. – Eonil
İlham için teşekkürler! Bunu bir bayrak ayarlayarak çözdüm. – Eonil