Go Println, подавляющий трассировку стека для pani c в String () - PullRequest
0 голосов
/ 17 марта 2020

В приведенном ниже коде недопустимый индексный доступ 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")
}

1 Ответ

0 голосов
/ 17 марта 2020

Просто напечатайте результат .String ()

package main

import (
    "fmt"
)

type Foo struct {
}

func (foo Foo) String() string {
    var x = "123"
    return fmt.Sprintf("%v", x[10])
}

func main() {
    fmt.Println(Foo{}.String())
    fmt.Println("done")
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...