第5章,部分字词修订。

This commit is contained in:
zhliner
2017-08-24 22:27:42 +08:00
parent 9c0723ff6a
commit ff3c5b0a70
11 changed files with 27 additions and 30 deletions

View File

@@ -3,7 +3,7 @@
在Go中有一部分函数总是能成功的运行。比如strings.Contains和strconv.FormatBool函数对各种可能的输入都做了良好的处理使得运行时几乎不会失败除非遇到灾难性的、不可预料的情况比如运行时的内存溢出。导致这种错误的原因很复杂难以处理从错误中恢复的可能性也很低。
还有一部分函数只要输入的参数满足一定条件也能保证运行成功。比如time.Date函数该函数将年月日等参数构造成time.Time对象除非最后一个参数时区是nil。这种情况下会引发panic异常。panic是来自被调函数的信号表示发生了某个已知的bug。一个良好的程序永远不应该发生panic异常。
还有一部分函数只要输入的参数满足一定条件也能保证运行成功。比如time.Date函数该函数将年月日等参数构造成time.Time对象除非最后一个参数时区是nil。这种情况下会引发panic异常。panic是来自被调函数的信号表示发生了某个已知的bug。一个良好的程序永远不应该发生panic异常。
对于大部分函数而言永远无法确保能否成功运行。这是因为错误的原因超出了程序员的控制。举个例子任何进行I/O操作的函数都会面临出现错误的可能只有没有经验的程序员才会相信读写操作不会失败即使是简单的读写。因此当本该可信的操作出乎意料的失败后我们必须弄清楚导致失败的原因。
@@ -31,9 +31,9 @@ fmt.Printf("%v", err)
在Go中函数运行失败时会返回错误信息这些错误信息被认为是一种预期的值而非异常exception这使得Go有别于那些将函数运行失败看作是异常的语言。虽然Go有各种异常机制但这些机制仅被使用在处理那些未被预料到的错误即bug而不是那些在健壮程序中应该被避免的程序错误。对于Go的异常机制我们将在5.9介绍。
Go这样设计的原因是由于对于某个应该在控制流程中处理的错误而言将这个错误以异常的形式抛出会混乱对错误的描述这通常会导致一些糟糕的后果。当某个程序错误被当作异常处理后这个错误会将堆栈根据信息返回给终端用户,这些信息复杂且无用,无法帮助定位错误。
Go这样设计的原因是由于对于某个应该在控制流程中处理的错误而言将这个错误以异常的形式抛出会混乱对错误的描述这通常会导致一些糟糕的后果。当某个程序错误被当作异常处理后这个错误会将堆栈跟踪信息返回给终端用户,这些信息复杂且无用,无法帮助定位错误。
正因此Go使用控制流机制如if和return处理异常,这使得编码人员能更多的关注错误处理。
正因此Go使用控制流机制如if和return处理错误,这使得编码人员能更多的关注错误处理。
{% include "./ch5-04-1.md" %}