Почему этот пример паники ниже ошибки типа в golang? - PullRequest
0 голосов
/ 09 ноября 2018

Почему этот panicf-sprintf вызывает ошибку type в Golang 1.11? Go не объясняет причину, даже если говорит, что это распространенная ошибка.

https://golang.org/doc/go1.11#vet

go vet теперь применяется во время сборки.

func panicf(s string, i ...interface{}) { panic(fmt.Sprintf(s, i)) }

Тест возвращается

missing ... in args forwarded to printf-like function

vet описывает это как

func (*ptrStringer) BadWrap(x int, args ...interface{}) string {
    return fmt.Sprint(args) // ERROR "missing ... in args forwarded to print-like function"
}

func (*ptrStringer) BadWrapf(x int, format string, args ...interface{}) string {
    return fmt.Sprintf(format, args) // ERROR "missing ... in args forwarded to printf-like function"

Пожалуйста, помогите объяснить ... в golang в этом контексте.

Вот функциональная игровая площадка: https://play.golang.org/p/DijjanQNkxK

1 Ответ

0 голосов
/ 09 ноября 2018

panicf() принимает i как переменную, такую ​​же как fmt.Sprintf(). Поэтому вы должны сообщить компилятору, что вы хотите, чтобы каждое значение i было отправлено на fmt.Sprintf() вместо того, чтобы отправлять всю вещь в виде слайса.

Поэтому измените код на:

func panicf(s string, i ...interface{}) { panic(fmt.Sprintf(s, i...)) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...