error-handling - Go 中的自定义错误处理

标签 error-handling go

我一直在阅读 this blog post但我仍然不相信我确切地知道该怎么做才能获得我可以从我的函数返回并在它们之外处理的自定义错误。

这是我目前正在做的:

func doSomething() int {
    x := 0
    // Do something with x.
    ...
    if somethingBadHappened {
        return -1
    }
    if somethingElseBadHappened {
        return -2
    }
    return x
}

这就是我想做的:

func doSomething() int, ? {
    ...
    if somethingBadHappened {
        return ?, err
    }
    if somethingElseBadHappened {
        return ?, err2
    }
    return x, nil
}

但我不确定如何以及用什么替换这些问号。

最佳答案

如果你不想的话,你真的不需要返回一个整数。你可以这样做:

func doSomething() error {
  ...
  if somethingBadHappened {
      return errors.New("something bad happened")
  }
  if somethingElseBadHappened {
      return errors.New("something else bad happened")
  }
  return nil
}

或者如果你想返回整数

func doSomething() (int, error) {
  ...
  if somethingBadHappened {
      return -1, errors.New("something bad happened")
  }
  if somethingElseBadHappened {
      return -2, errors.New("something else bad happened")
  }
  return x, nil
}

一定要在顶部import "errors"

如果你想测试你是否得到错误,你可以这样做

x, err := doSomething()
if err != nil {
  log.Println(err)
}

关于error-handling - Go 中的自定义错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15462074/

相关文章:

ruby-on-rails - 缩短终端中的错误消息

C++ 程序崩溃,退出代码为 : 9 (SIGKILL)

python - 我找不到有关TypeError : object of type 'bool' has no len() error的任何解决方案

C++(.cpp 文件和 .h 文件。)拆分代码并添加一个函数,提取 - 容易吗?

google-app-engine - GAE 数据存储 (Golang) : Filter Query When Adding New DB Field

go - filepath.Abs​​() 在结果中不提供子目录

c - 将 *C.uint8_t 转换为 []uint8 是否安全?

json - 在 golang 中将结构与其 json 逻辑分开?

go - 启动 Go HTTP 服务器,执行某些操作,然后在任务完成后将其关闭

error-handling - yii2要验证的尺寸并以表格形式显示错误消息