История изменений
Исправление red75prim, (текущая версия) :
Вы, блин, определитесь.
Ладно, я тоже грешу тем, что сомневаюсь во вменяемости собеседника, когда не понимаю, что происходит в его голове. Так что распишу по буквам.
Паники не предназначены для организации control flow в процессе выполнения программы предусмотренным программистом образом. Для этого есть Result’ы. Паники предназначены для индикации непредусмотренных программистом обстоятельств: выход индекса за границу массива, в том случае если он не должен выходить ни при каких условиях, отсутствие файла, который обязательно должен лежать по такому-то пути (например, потому что мы только что его туда записали) и т.п.
Но паники при возникновении, естественно, создают свой control flow (если программа не собрана с panic=«abort»), который иногда нужно контролировать.
У меня есть несколько версий почему так происходит.
Я уже свою версию озвучил: паника = баг (или непредусмотренная ситуация), доступное потоку состояние недоверенно, полагаться на инварианты в забагованном коде бессмысленно (паники как раз и должны возникать в том числе при нарушении инвариантов).
Исходная версия red75prim, :
Вы, блин, определитесь.
Ладно, я тоже грешу тем, что сомневаюсь во вменяемости собеседника, когда не понимаю, что происходит в его голове. Так что распишу по буквам.
Паники не предназначены для организации control flow в процессе выполнения программы предусмотренным программистом образом. Для этого есть Result’ы. Паники предназначены для индикации непредусмотренных программистом обстоятельств: выход индекса за границу массива, в том случае если он не должен выходить ни при каких условиях, отсутствие файла, который обязательно должен лежать по такому-то пути (например, потому что мы только что его туда записали) и т.п.
Но паники при возникновении, естественно, создают свой control flow (если программа не собрана с panic=«abort»), который иногда нужно контролировать.
У меня есть несколько версий почему так происходит.
Я уже свою версию озвучил: паника = баг (или непредусмотренная ситуация), доступное потоку состояние недоверенно, полагаться на инварианты в забагованном коде бессмысленно.