В Голанге существует два способа распространения ошибок, чтобы вернуть ошибку, которая в основном зависит от функции, а не фатальные ошибки. Другие один является паникой, распространяющаяся через функцию стеку вызовов до окончания процесса или пока он не достиг восстановление
Panic является встроенной функцией, которая останавливает обычный поток управления и начинает паниковать. Когда функция F вызывает панику, выполнение F останавливается, любые отложенные функции в F выполняются нормально, а затем F возвращается к вызывающему. Для вызывающего абонента F затем ведет себя как призыв к панике. Процесс продолжается до стека до тех пор, пока все функции в текущем goroutine не вернутся, и в этот момент программа выйдет из строя. Паники могут быть инициированы путем прямого вызова паники. Они также могут быть вызваны ошибками времени выполнения, такими как доступ к массивам вне границ.
Восстановление - это встроенная функция, которая восстанавливает контроль над паникой goroutine. Восстановление полезно только в отложенных функциях. Во время нормального выполнения вызов для восстановления возвращает нуль и не имеет другого эффекта. Если текущий goroutine впадает в панику, вызов для восстановления захватит значение, данное панике, и возобновит нормальное выполнение.
Если вы хотите игнорировать панику вы можете позвонить восстановить и инспектировать сообщение паники, чтобы увидеть, если сообщение паники ожидаемого типа, который нормально игнорировать
Вот как вы можете сделать это
//RecoverPanic recovers from panic given the message String
//if no message string is given it recovers from all panics
//Example:
// defer RecoverPanic("stack overflow")
//The above satatement recovers any function from panic that happen
//due to stackoverflow
func RecoverPanic(msg string) {
if r := recover(); r != nil {
if msg != "" {
if r != msg {
panic(r)
}
}
}
}
После этого вы можете позвонить, в начале вызова функции
funtion foo(){
defer RecoverPanic("stack overflow")
......
}
Есть иногда Паника не может быть охарактеризована, например, паника при попытке выделить память из-за недостаточной памяти, которую нельзя пытаться обрабатывать, поскольку функция для обработки сама по себе может паниковать, поскольку нет памяти для хранения ее данных.
Тогда как можно справиться с этой фатальной ошибкой? Это приведет к сбою программы. – zgcharley
Вы не можете справиться с этим, это должно разрушить вашу программу. Если вы используете эту ошибку, проблема с вашей программой. – JimB
К сожалению, это в библиотеке, которую я использую, я хочу обрабатывать ее на своем уровне. Похоже, нет способа сделать это ... – zgcharley