package main
import (
"fmt"
)
// FileReadError 自定义文件读取失败的错误类型
type FileReadError struct {
ErrMsg string
FileName string
}
// Error 返回基本错误信息,满足error接口
func (f FileReadError) Error() string {
return f.ErrMsg
}
// Format 实现fmt.Formatter接口,支持不同格式化方式
func (f FileReadError) Format(s fmt.State, verb rune) {
switch verb {
case 'v':
if s.Flag('+') {
fmt.Fprintf(s, "FileReadError{ErrMsg: %s, FileName: %s}", f.ErrMsg, f.FileName)
} else {
fmt.Fprintf(s, f.ErrMsg)
}
case's':
fmt.Fprintf(s, f.ErrMsg)
case '#v':
fmt.Fprintf(s, "main.FileReadError{ErrMsg: %q, FileName: %q}", f.ErrMsg, f.FileName)
}
}
func main() {
err := FileReadError{
ErrMsg: "文件读取失败",
FileName: "test.txt",
}
fmt.Printf("%v\n", err)
fmt.Printf("%+v\n", err)
fmt.Printf("%s\n", err)
fmt.Printf("%#v\n", err)
}