Возьмём рабочий скрипт в нём ошибка, в цикле
<= вместо просто
<package main
import "fmt"
func main() {
var x [5]float64
x[0] = 98
x[1] = 93
x[2] = 77
var total float64 = 0
for i := 0; i <= 5; i++ {
total += x[i]
}
fmt.Println(total / 3)
}
Ошибка:
panic: runtime error: index out of range
goroutine 1 [running]:
panic (0x4ef600, 0xc082002030)
C:/Go/src/runtime/panic.go:464 +0x3f4
main.main()
C:/Go/test/test.go: 12 +0x199
exit status 2
В целом в первой строчке тут текст panic указан. Добавим recover
Мы можем обрабатывать паники с помощью встроенной функции recover.
Функция recover останавливает панику и возвращает значение, которое было передано функции panic.
Стало:
package main
import "fmt"
func main() {
var x [5]float64
x[0] = 98
x[1] = 93
x[2] = 77
var total float64 = 0
for i := 0; i <= 5; i++ {
total += x[i]
}
fmt.Println(total / 5)
}
defer func() {
str := recover()
fmt.Println(str)
}()
Но в ответ
#command-line-arguments
.\test.go:18: syntax error: non-declaration statement outside function body
.\test.go:19: syntax error: unexpected str, expecting (
.\test.go:19: method has no receiver
.\test.go:20: syntax error: non-declaration statement outside function body
Т.е. все ошибки связаны как раз с добавленным блоком, а первоначальная ошибка не отображается. Я что-то неправильно сделал и как правильно пользоваться этой функцией?