Call has possible formatting directive

Go

Go Problem Overview


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?

Go Solutions


Solution 1 - Go

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)

Solution 2 - Go

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.

Solution 3 - Go

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionYevgeniy GendelmanView Question on Stackoverflow
Solution 1 - GoSchwernView Answer on Stackoverflow
Solution 2 - GoAdrianView Answer on Stackoverflow
Solution 3 - Go轩辕义View Answer on Stackoverflow