Вызов имеет возможную директиву форматирования
Когда я запускаю этот код
package main
import ("fmt")
func main() {
i := 5
fmt.Println("Hello, playground %d",i)
}
(ссылка на игровую площадку)
Я получаю следующее предупреждение:
prog.go: 5: в вызове Println есть директива возможного форматирования% d
Пойдите, ветеринар вышел.
Как правильно это сделать?
Ответы
Ответ 1
fmt.Println
не выполняет форматирование, например, %d
. Вместо этого он использует формат своих аргументов по умолчанию и добавляет пробелы между ними.
fmt.Println("Hello, playground",i) // Hello, playground 5
Если вы хотите форматировать в стиле printf, используйте fmt.Printf
.
fmt.Printf("Hello, playground %d\n",i)
И вам не нужно быть конкретным в отношении типа. %v
, как правило, поймет это.
fmt.Printf("Hello, playground %v\n",i)
Ответ 2
Предупреждение говорит вам, что у вас есть директива форматирования (в данном случае %d
) при вызове Println
. Это предупреждение, потому что Println
не поддерживает директивы форматирования. Эти директивы поддерживаются отформатированными функциями Printf
и Sprintf
. Это подробно объясняется в документации пакета fmt
.
Как вы можете ясно видеть, когда вы запускаете свой код, вывод
Hello, playground %d 5
Потому что Println
делает то, что говорят его документы, - он печатает свои аргументы с последующим переводом строки. Измените это на Printf
, что, скорее всего, вы и хотели, , и вместо этого вы получите:
Hello, playground 5
Что, вероятно, то, что вы хотели.
Ответ 3
package main
import ("fmt")
func main() {
i := 5
fmt.Println("Hello, playground %d",i)
}
===================================================
package main
import ("fmt")
func main() {
i := 5
fmt.Printf("Hello, playground %d",i)
}