When I run this code
package main
import ("fmt")
func main() {
i := 5
fmt.Println("Hello, playground %d",i)
}
(playground link)
I get the following warning:
prog.go:5: Println call has possible formatting directive %d
Go vet exited.
What is a proper way to do this?
fmt.Println
doesn't do formatting things like %d
. Instead, it uses the default format of its arguments, and adds spaces between them.
fmt.Println("Hello, playground",i) // Hello, playground 5
If you want printf style formatting, use fmt.Printf
.
fmt.Printf("Hello, playground %d\n",i)
And you don't need to be particular about the type. %v
will generally figure it out.
fmt.Printf("Hello, playground %v\n",i)
The warning is telling you you have a formatting directive (%d
in this case) in a call to Println
. This is a warning because Println
does not support formatting directives. These directives are supported by the formatted functions Printf
and Sprintf
. This is explained thoroughly in the fmt
package documentation.
As you can plainly see when you run your code, the output is
Hello, playground %d 5
Because Println
does what its docs say - it prints its arguments followed by a line break. Change that to Printf
, which is likely what you intended, and you get this instead:
Hello, playground 5
Which is presumably what you intended.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With