error - ожидаемые сбои (сеть, ввод, файл не найден). Вызывающий решает, что делать. panic - невосстановимые ошибки программиста (nil pointer, нарушение инварианта) или когда продолжать невозможно. В библиотеках предпочтительно возвращать error. В main/init иногда panic допустим.