В приведенном ниже коде недопустимый индексный доступ x[10]
приводит к пани c. Однако созданное сообщение pani c не показывает трассировку стека ошибки - скорее, это выглядит так: %!v(PANIC=String method: runtime error: index out of range [10] with length 3)
. Кроме того, вместо завершения программа продолжает работать после того, как произошел пани c.
На основании этого ответа кажется, что Println
ловит панику из String()
методов и регистрирует их. Как предотвратить такое поведение, чтобы 1) моя программа завершилась даже в pani c методом String()
и 2) была показана полная трассировка стека pani c?
package main
import (
"fmt"
)
type Foo struct {
}
func (foo Foo) String() string {
var x = "123"
return fmt.Sprintf("%v", x[10]) // invalid index
}
func main() {
fmt.Println(Foo{})
fmt.Println("done")
}