go - 如何修复m [0] == nil {},以便将其计入err

标签 go

我正在编写一个代码,并停留在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/

相关文章:

go - 如何获取 Go 详细的构建日志,以及 GOPATH 和 "go module"模式下所有使用的包?

file - 如何在 Go 中创建跨平台文件路径?

go - strings.Trim 正在删除字母 "i"(golang)

go - Go支持继承吗?

session - 我如何获取 cookie/session 信息以便我可以将其与 API 一起使用?

json - 使用反射迭代 json

pointers - 满足接口(interface)的 Go 结构方法类型

go - golang http动态添加路由

go - 在 Go 时间模块上苦苦挣扎

go - 是否可以在另一个包中实现具有未导出方法的接口(interface)?