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?

Original source