mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:06:41 +08:00
校对13.1
This commit is contained in:
@@ -42,7 +42,7 @@ func main() {
|
||||
|
||||
```
|
||||
|
||||
可以用于计算平方根函数的参数测试:
|
||||
可以把它用于计算平方根函数的参数测试:
|
||||
|
||||
```go
|
||||
func Sqrt(f float64) (float64, error) {
|
||||
@@ -54,7 +54,7 @@ func Sqrt(f float64) (float64, error) {
|
||||
|
||||
```
|
||||
|
||||
你可以像下面这样调用这个函数:
|
||||
你可以像下面这样调用 Sqrt 函数:
|
||||
|
||||
```go
|
||||
if f, err := Sqrt(-1); err != nil {
|
||||
@@ -65,7 +65,7 @@ if f, err := Sqrt(-1); err != nil {
|
||||
|
||||
由于 `fmt.Printf` 会自动调用 `String()` 方法 (参见 10.7 节),所以错误信息 “Error: math - square root of negative number” 会打印出来。通常(错误信息)都会有像 “Error:” 这样的前缀,所以你的错误信息不要以大写字母开头。
|
||||
|
||||
在大部分情况下自定义错误结构类型是有趣的,可以包含除了(低层级的)错误信息以外的其它有用信息,例如,正在进行的操作(打开文件等),全路径或名字。看下面例子中 os.Open 操作触发的 PathError 错误:
|
||||
在大部分情况下自定义错误结构类型很有意义的,可以包含除了(低层级的)错误信息以外的其它有用信息,例如,正在进行的操作(打开文件等),全路径或名字。看下面例子中 os.Open 操作触发的 PathError 错误:
|
||||
|
||||
```go
|
||||
// PathError records an error and the operation and file path that caused it.
|
||||
@@ -81,7 +81,7 @@ func (e *PathError) String() string {
|
||||
|
||||
```
|
||||
|
||||
如果会有不同的错误条件可能发生,那么对实际的错误使用类型断言或类型判断(type-switch)是很有用的,并且可以根据错误情况做一些补救和恢复操作。
|
||||
如果有不同错误条件可能发生,那么对实际的错误使用类型断言或类型判断(type-switch)是很有用的,并且可以根据错误场景做一些补救和恢复操作。
|
||||
|
||||
```go
|
||||
// err != nil
|
||||
@@ -99,7 +99,8 @@ case ParseError:
|
||||
PrintParseError(err)
|
||||
case PathError:
|
||||
PrintPathError(err)
|
||||
... default:
|
||||
...
|
||||
default:
|
||||
fmt.Printf(“Not a special error, just %s\n”, err)
|
||||
}
|
||||
|
||||
@@ -128,7 +129,7 @@ if serr, ok := err.(*json.SyntaxError); ok {
|
||||
|
||||
```
|
||||
|
||||
包也可以用别的方法定义指定的错误,比如 net.Errot:
|
||||
包也可以用额外的方法(methods)定义特定的错误,比如 net.Errot:
|
||||
|
||||
```go
|
||||
package net
|
||||
@@ -143,7 +144,7 @@ type Error interface {
|
||||
|
||||
正如你所看到的一样,所有的例子都遵循同一种命名规范:错误类型以 “Error” 结尾,错误变量以 “err” 或 “Err” 开头。
|
||||
|
||||
syscall 是低阶外部包,用来提供基本系统调用的原始接口。它们返回整数的错误码;类型 syscall.Errno 实现了 Error 接口。
|
||||
syscall 是低阶外部包,用来提供系统基本调用的原始接口。它们返回整数的错误码;类型 syscall.Errno 实现了 Error 接口。
|
||||
|
||||
大部分 syscall 函数都返回一个结果和可能的错误,比如:
|
||||
|
||||
@@ -171,9 +172,9 @@ var (
|
||||
|
||||
## 13.1.2 用 fmt 创建错误对象
|
||||
|
||||
通常你想要返回用包含错误参数的更有信息量的字符串,例如:可以用 `fmt.Errorf()` 实现:它和 fmt.Printf() 完全一样,接收一个有一个或多个格式占位符的格式化字符串和相应数量的占位变量。和打印信息不同的是它用信息生成错误对象。
|
||||
通常你想要返回包含错误参数的更有信息量的字符串,例如:可以用 `fmt.Errorf()` 来实现:它和 fmt.Printf() 完全一样,接收有一个或多个格式占位符的格式化字符串和相应数量的占位变量。和打印信息不同的是它用信息生成错误对象。
|
||||
|
||||
在上面的平方根例子中使用:
|
||||
比如在前面的平方根例子中使用:
|
||||
|
||||
```go
|
||||
if f < 0 {
|
||||
@@ -182,12 +183,11 @@ if f < 0 {
|
||||
|
||||
```
|
||||
|
||||
第二个例子:从命令行读取输入时,如果加了 help 标志,我们就产生用有用的信息产生一个错误:
|
||||
第二个例子:从命令行读取输入时,如果加了 help 标志,我们可以用有用的信息产生一个错误:
|
||||
|
||||
```go
|
||||
if len(os.Args) > 1 && (os.Args[1] == “-h” || os.Args[1] == “--help”) {
|
||||
err = fmt.Errorf(“usage: %s infile.txt outfile.txt”, filepath.Base(os.
|
||||
Args[0]))
|
||||
err = fmt.Errorf(“usage: %s infile.txt outfile.txt”, filepath.Base(os.Args[0]))
|
||||
return
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user