第十三章修改 (#837)

Co-authored-by: Joe Chen <jc@unknwon.io>
This commit is contained in:
Haigang Zhou
2022-05-13 19:20:09 +08:00
committed by GitHub
parent d29644465a
commit 92d91dfa1c
11 changed files with 70 additions and 70 deletions

View File

@@ -22,13 +22,13 @@ fType1 = func f(a type1, b type2)
在我们的模式中使用了两个帮助函数:
1check这是用来检查是否有错误和 panic 发生的函数:
1`check()`:这是用来检查是否有错误和 panic 发生的函数:
```go
func check(err error) { if err != nil { panic(err) } }
```
2errorhandler这是一个包装函数。接收一个 fType1 类型的函数 fn 并返回一个调用 fn 的函数。里面就包含有 defer/recover 机制,这在 [13.3 节](13.3.md) 中有相应描述。
2`errorhandler()`:这是一个包装函数。接收一个 `fType1` 类型的函数 `fn` 并返回一个调用 `fn` 的函数。里面就包含有 defer/recover 机制,这在 [13.3 节](13.3.md)中有相应描述。
```go
func errorHandler(fn fType1) fType1 {
@@ -43,7 +43,7 @@ func errorHandler(fn fType1) fType1 {
}
```
当错误发生时会 recover 并打印在日志中;除了简单的打印,应用也可以用 template 包(参见 [15.7 节](15.7.md)为用户生成自定义的输出。check() 函数会在所有的被调函数中调用,像这样:
当错误发生时会 recover 并打印在日志中;除了简单的打印,应用也可以用 `template` 包(参见 [15.7 节](15.7.md))为用户生成自定义的输出。`check()` 函数会在所有的被调函数中调用,像这样:
```go
func f1(a type1, b type2) {
@@ -58,7 +58,7 @@ func f1(a type1, b type2) {
}
```
通过这种机制,所有的错误都会被 recover并且调用函数后的错误检查代码也被简化为调用 check(err) 即可。在这种模式下,不同的错误处理必须对应不同的函数类型;它们(错误处理)可能被隐藏在错误处理包内部。可选的更加通用的方式是用一个空接口类型的切片作为参数和返回值。
通过这种机制,所有的错误都会被 recover并且调用函数后的错误检查代码也被简化为调用 `check(err)` 即可。在这种模式下,不同的错误处理必须对应不同的函数类型;它们(错误处理)可能被隐藏在错误处理包内部。可选的更加通用的方式是用一个空接口类型的切片作为参数和返回值。
我们会在 [15.5 节](15.5.md) 的 web 应用中使用这种模式。
@@ -122,7 +122,7 @@ Returned normally from f.
**练习 13.3**[panic_defer_convint.go](exercises/chapter_13/panic_defer_convint.go)
写一个 ConvertInt64ToInt 函数把 int64 值转换为 int 值,如果发生错误(提示:参见 [4.5.2.1 节](04.5.md#4521-整型-int-和浮点型-float))就 panic 。然后在函数 IntFromInt64 中调用这个函数并 recover返回一个整数和一个错误。请测试这个函数
写一个 `ConvertInt64ToInt()` 函数把 `int64` 值转换为 `int` 值,如果发生错误(提示:参见 [4.5.2.1 节](04.5.md#4521-整型-int-和浮点型-float))就 `panic()` 。然后在函数 `IntFromInt64` 中调用这个函数并 `recover()`,返回一个整数和一个错误。请测试这个函数!
## 链接