给如下结构体实现 error
接口
type codeError struct {
code int64
cause error
msg string
}
效率重视型:
func (err codeError) Error() string {
msg := fmt.Sprintf("error code: %d", err.code)
if err.msg != "" {
msg += fmt.Sprintf(", msg:%s", err.msg)
}
if err.cause != nil {
msg += fmt.Sprintf(", cause:%s", err.cause.Error())
}
return msg
}
效率重视型:
func (err codeError) Error() string {
msgSlice := make([]string, 0, 6)
msgSlice = append(msgSlice,
"error code: ",
strconv.FormatInt(err.code, 10),
)
if err.msg != "" {
msgSlice = append(msgSlice,
", msg: ",
err.msg,
)
}
if err.cause != nil {
msgSlice = append(msgSlice,
", cause: ",
err.cause.Error(),
)
}
builder := strings.Builder{}
builder.Grow(len(msgSlice))
for _, s := range msgSlice {
builder.WriteString(s)
}
return builder.String()
}