вывод %!(EXTRA int=1)
наткнулся на старнную запись в логе
2024/04/13 14:58:58 article.NumOfRequests = %!(EXTRA int=1)
выводится при исполнении кода:
article, err := articlefinder.FindBySeoId(seoId, service.Repos.GetArticles())
article.NumOfRequests += 1
log.Printf("article.NumOfRequests = ", article.NumOfRequests)
return *article, err
что значит такой странный формат вывода?
Ответы (1 шт):
У вас в Printf
аргументов больше, чем директив форматирования. Все "лишние" аргументы печатаются как %!(EXTRA type=value)
:
fmt.Printf("Hello, %s", "world", 123, 456.789, true)
Hello, world%!(EXTRA int=123, float64=456.789, bool=true)
Такой вызов не нарушает правила языка, поэтому компилятор не ругается. Если вы хотите отлавливать такие ошибки на этапе сборки, добавте в makefile вызов go vet
. Эта команда выдаст ошибку
./prog.go:8:2: fmt.Printf call needs 1 arg but has 4 args
Попробуйте заодно подставить значение не того типа, какое ожидает спецификатор. Например, в качестве аргумента для %s
подставьте число:
fmt.Printf("Hello, %s", 123)
Будет напечатано Hello, %!s(int=123)
, формат вывода %!<spec>(type=value)
.
Такие ошибки go vet
тоже находит: fmt.Printf format %s has arg 123 of wrong type int