What is the correct format specifier to print error object in Go: %s or %v?
error-handling, go, string-formatting
Solution
According to docs:
%v the value in a default format
...
%s the uninterpreted bytes of the string or slice
Also, more information about `error`:
The error type is an interface type. An error variable represents any value that can describe itself as a string.
So, treat it as `%s`.
Problem
Here is my program. ``` package main import ( "errors" "fmt" ) func main() { a := -1 err := assertPositive(a) fmt.Printf("error: %s; int: %d\n", err, a) fmt.Printf("error: %v; int: %d\n", err, a) } func assertPositive(a int) error { if a <= 0 { return errors.New("Assertion failure") } return nil } ``` Here is the output. ``` error: Assertion failure; int: -1 error: Assertion failure; int: -1 ``` In this program, it makes no difference whether I use `%s` or `%v` to print the `error` object. I have two questions. - Is there any scenario while printing errors where it would make a difference for `%s` and `%v`? - What is the correct format specifier to use in this case?