第7章,部分字词修订,语序调整。少量错误修订。

This commit is contained in:
zhliner
2017-08-24 22:29:24 +08:00
parent 9a9b9a0594
commit 17919273e1
14 changed files with 87 additions and 87 deletions

View File

@@ -1,6 +1,6 @@
## 7.11. 基于类型断言区别错误类型
思考在os包中文件操作返回的错误集合。I/O可以因为任何数量的原因失败但是有三种经常的错误必须进行不同的处理文件已经存在对于创建操作找不到文件对于读取操作和权限拒绝。os包中提供了三个帮助函数来对给定的错误值表示的失败进行分类:
思考在os包中文件操作返回的错误集合。I/O可以因为任何数量的原因失败但是有三种经常的错误必须进行不同的处理文件已经存在对于创建操作找不到文件对于读取操作和权限拒绝。os包中提供了三个帮助函数来对给定的错误值表示的失败进行分类
```go
package os
@@ -19,9 +19,9 @@ func IsNotExist(err error) bool {
}
```
但是处理I/O错误的逻辑可能一个和另一个平台非常的不同所以这种方案并不健壮并且对相同的失败可能会报出各种不同的错误消息。在测试的过程中通过检查错误消息的子字符串来保证特定的函数以期望的方式失败是非常有用的但对于线上的代码是不够的。
但是处理I/O错误的逻辑可能一个和另一个平台非常的不同所以这种方案并不健壮并且对相同的失败可能会报出各种不同的错误消息。在测试的过程中,通过检查错误消息的子字符串来保证特定的函数以期望的方式失败是非常有用的,但对于线上的代码是不够的。
一个更可靠的方式是使用一个专门的类型来描述结构化的错误。os包中定义了一个PathError类型来描述在文件路径操作中涉及到的失败像Open或者Delete操作,并且定义了一个叫LinkError的变体来描述涉及到两个文件路径的操作像Symlink和Rename。这下面是os.PathError
一个更可靠的方式是使用一个专门的类型来描述结构化的错误。os包中定义了一个PathError类型来描述在文件路径操作中涉及到的失败像Open或者Delete操作并且定义了一个叫LinkError的变体来描述涉及到两个文件路径的操作像Symlink和Rename。这下面是os.PathError
```go
package os
@@ -38,7 +38,7 @@ func (e *PathError) Error() string {
}
```
大多数调用方都不知道PathError并且通过调用错误本身的Error方法来统一处理所有的错误。尽管PathError的Error方法简单地把这些字段连接起来生成错误消息PathError的结构保护了内部的错误组件。调用方需要使用类型断言来检测错误的具体类型以便将一种失败和另一种区分开具体的类型比字符串可以提供更多的细节。
大多数调用方都不知道PathError并且通过调用错误本身的Error方法来统一处理所有的错误。尽管PathError的Error方法简单地把这些字段连接起来生成错误消息PathError的结构保护了内部的错误组件。调用方需要使用类型断言来检测错误的具体类型以便将一种失败和另一种区分开具体的类型可以比字符串提供更多的细节。
```go
_, err := os.Open("/no/such/file")