Вызов имеет возможную директиву форматирования

Когда я запускаю этот код

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)
}