我正在编写一个代码,并停留在m[0] == nil
。如果代码包含{[]error{nil, err}
,则应返回err == 1 { return m[0].Error()}
但是插入它会将nil
计为err并返回for m[0] == nil{ return "0 errors"
另一个示例是{[]error{err, nil}
,应该返回m[0].Error()
,而不是err==2
我添加了m== nil
和
(m[0] ==nil
-否则我会感到恐慌:运行时错误:无效的内存地址或nil指针取消引用)
type Errors []error
func (m Errors) Error() string {
if m == nil{
return "(0 errors)"
}else if err := len(m); err == 0 {
return "(0 errors)"
}else if m[0]==nil{
return "(0 errors)"
}else if err == 1 {
return m[0].Error()
} else if err == 2 {
return m[0].Error() + " (and 1 other error)"
}else {
return fmt.Sprint(m[0].Error(), " (and 2 other errors)")
}
}
最佳答案
这段代码更具表现力。希望对您有所帮助。
至于m [0] == nil-如果它为nil,为什么要首先在 slice 中添加错误?
func (m Errors) Error() string {
count := 0
if m != nil {
count = len(m)
}
switch count {
case 0:
return "(0 errors)"
case 1:
return m[0].Error()
default:
return fmt.Sprint(m[0].Error(), " (and ", count, " other errors)")
}
}
关于go - 如何修复m [0] == nil {},以便将其计入err,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57952386/