在 Go 中打印错误对象的正确格式说明符是什么:%s 或 %v?
What is the correct format specifier to print error object in Go: %s or %v?
这是我的程序。
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
}
这是输出。
error: Assertion failure; int: -1
error: Assertion failure; int: -1
在这个程序中,我用%s
还是%v
打印都没有区别
error
对象。
我有两个问题。
- 打印错误时是否有任何情况会导致
%s
和 %v
的区别?
- 在这种情况下使用的正确格式说明符是什么?
%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.
因此,将其视为 %s
。
这是我的程序。
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
}
这是输出。
error: Assertion failure; int: -1
error: Assertion failure; int: -1
在这个程序中,我用%s
还是%v
打印都没有区别
error
对象。
我有两个问题。
- 打印错误时是否有任何情况会导致
%s
和%v
的区别? - 在这种情况下使用的正确格式说明符是什么?
%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.
因此,将其视为 %s
。