panic(nil)?Вызов panic(nil) по-прежнему запускает панику и раскрутку стека. Раньше recover() возвращал nil, и нельзя было отличить "паники не было" от "была panic(nil)".
Начиная с Go 1.21, при panic(nil) runtime подменяет значение на *runtime.PanicNilError. Поэтому recover() больше не вернёт nil - можно надёжно обработать такой случай.
defer func() {
if r := recover(); r != nil {
// r будет *runtime.PanicNilError при panic(nil)
fmt.Printf("panic: %v\n", r)
}
}()
panic(nil)
Передавайте в panic() осмысленное значение (строку или ошибку), чтобы упростить отладку: panic("неожиданный nil") или panic(err).