Проверяет понимание обработки ошибок и поведения программы при делении на ноль в Go.
В языке Go деление на ноль обрабатывается по-разному в зависимости от типа операндов. Для целых чисел деление на ноль приводит к панике (runtime panic), которая завершает выполнение программы, если её не перехватить. Для чисел с плавающей точкой деление на ноль не вызывает панику, а возвращает специальные значения, определённые стандартом IEEE 754.
При делении целого числа на ноль компилятор Go не выдаёт ошибку на этапе компиляции, но во время выполнения возникает паника. Это происходит потому, что целочисленное деление на ноль не имеет определённого результата в математике и не поддерживается процессором.
package main
func main() {
a := 10
b := 0
result := a / b // panic: runtime error: integer divide by zero
println(result)
}Чтобы избежать паники, необходимо проверять делитель перед выполнением операции:
package main
import "fmt"
func main() {
a := 10
b := 0
if b != 0 {
result := a / b
fmt.Println(result)
} else {
fmt.Println("деление на ноль невозможно")
}
}Для чисел с плавающей точкой (float32, float64) деление на ноль не вызывает панику. Вместо этого возвращается одно из специальных значений:
package main
import "fmt"
func main() {
a := 10.0
b := 0.0
result := a / b
fmt.Println(result) // +Inf
c := -10.0
result2 := c / b
fmt.Println(result2) // -Inf
d := 0.0
result3 := d / b
fmt.Println(result3) // NaN
}Если необходимо обработать панику при целочисленном делении на ноль, можно использовать механизм defer и recover:
package main
import "fmt"
func safeDivide(a, b int) (result int) {
defer func() {
if r := recover(); r != nil {
fmt.Println("паника перехвачена:", r)
result = 0
}
}()
return a / b
}
func main() {
fmt.Println(safeDivide(10, 0)) // паника перехвачена: runtime error: integer divide by zero
// 0
}Вывод: в Go целочисленное деление на ноль вызывает панику, которую нужно обрабатывать с помощью проверок или recover. Деление чисел с плавающей точкой на ноль безопасно и возвращает специальные значения, что полезно в научных и инженерных расчётах.