实现各种错误处理和资源管理。
编程中重要的一点是,即使出现错误,也要处理错误并关闭资源。
这个练习要求你处理各种错误。 因为错误处理相当依赖于具体的编程语言,你需要参考你所在语言轨道的测试来了解具体要求。
如果你刚开始接触 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函数(即使已经发生了错误)。