轨道
/
Go
Go
/
练习
/
错误处理
错误处理

错误处理

中等

说明

实现各种错误处理和资源管理。

编程中重要的一点是,即使出现错误,也要处理错误并关闭资源。

这个练习要求你处理各种错误。 因为错误处理相当依赖于具体的编程语言,你需要参考你所在语言轨道的测试来了解具体要求。

实现

如果你刚开始接触 Go 的错误或 panic,建议先阅读关于这些主题的文档来了解背景。

在这个练习中,你需要定义一个函数Use(opener ResourceOpener, input string) error,它会打开一个资源,对返回的资源调用Frob(input),然后无论发生什么都关闭该资源。你的函数应当妥善处理错误和 panic。

ResourceOpener opener是一个函数,你可以直接调用opener()来尝试“打开”该资源。它会以 Go 的惯用方式 返回一个Resource和一个错误值:

有关Resource、ResourceOpener、FrobError和TransientError的定义,请参阅 common.go 文件。你的解答需要与 common.go 和 error_handling_test.go 位于同一个包中:“erratum”。这样这些类型才能在你的解答中使用。

在Use函数中有几个地方可能会发生错误:

  • 调用作为第一个参数传入 Use 的ResourceOpener函数时,它可能会失败并返回TransientError类型的错误,这种情况下要继续尝试打开资源。 如果遇到的是其他类型的错误,就把它从Use函数中返回。

  • 对ResourceOpener函数返回的Resource调用Frob函数时,它可能会panic并抛出FrobError(或其他类型的错误)。 如果确实是FrobError,你就必须调用该 Resource 的Defrob函数,并把 panic 抛出的FrobError的.defrobTag变量作为Defrob函数的输入。 无论哪种情况,Use都应返回这个错误。

  • 另外注意:如果Resource成功打开了,请务必无论发生什么都恰好调用一次它的Close函数(即使已经发生了错误)。

测试特定的错误类型可以用类型断言。 你可能还需要看看具名返回值,它是从 panic 恢复中返回错误信息的一种有用方式。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Go Exercism

准备好开始 错误处理 了吗?

注册 Exercism,借助 34 个概念165 个练习 和真人导师指导,学习并掌握 Go,全部免费。